Здравствуйте, samius, Вы писали:
S>S>var provider = new MyCustomSqlFormatProvider();
S>FormattableString sql = $"SELECT * FROM SomeTable WHERE Age = {age} and Name = {name}";
S>var safeSqlString = sql.ToString(provider);
S>
Ещё раз. Это даст строку. Неясно как из этого получить объект произвольного типа. Представь себе, что
name это бинарный поток, например. В base64 перекладывать будешь или как?
Вот как реализация DB выглядит в примере:
public PreparedStatement process(StringTemplate st) throws SQLException {
// 1. Replace StringTemplate placeholders with PreparedStatement placeholders
String query = String.join("?", st.fragments());
// 2. Create the PreparedStatement on the connection
PreparedStatement ps = conn.prepareStatement(query);
// 3. Set parameters of the PreparedStatement
int index = 1;
for (Object value : st.values()) {
switch (value) {
case Integer i -> ps.setInt(index++, i);
case Float f -> ps.setFloat(index++, f);
case Double d -> ps.setDouble(index++, d);
case Boolean b -> ps.setBoolean(index++, b);
default -> ps.setString(index++, String.valueOf(value));
}
}
return ps;
}
Принципиальная разница в том, что шарпы-скрипты могут создавать только текстовую строку, а сабж — произвольный объект.