Я использовал postgreSQL в PHP, и это было просто: когда вы делаете запрос, вы делаете:
$result = pg_query($conn, "SELECT author, email FROM authors WHERE dest='" + pg_escape_string($s) + "'");
Простой.Безопасный (насколько я знаю).
Теперь я хочу сделать то же самое с SQLite в C #:
SQLiteCommand query = m_conn.CreateCommand();
query.CommandText = "SELECT author, email FROM authors WHERE dest=@param";
query.Parameters.Add("@dest", SqlDbType.String).Value = s;
m_datareader = query.ExecuteReader();
Не слишком ли это излишне?Если нет, то почему?
Из того, что я знаю, в конце концов, строка, отправляемая в базу данных, все еще является строкой, почему она должна проходить через это, а не просто вручную обрабатывать небезопасные строки?Если в ASP .NET для печати некоторого небезопасного текста в HTML это также
htmlAdd.Text("<div>@param1</div>");
htmlAdd.Parameters.Add("@param1").Value = unsafeUsername;
?
Я хотел бы сделать этот класс:
class QueryResultSet
{
public QueryResultSet(SQLiteConnection conn, string queryText)
{
m_conn = conn;
m_conn.Open();
SQLiteCommand query = m_conn.CreateCommand();
query.CommandText = queryText;
m_datareader = query.ExecuteReader();
}
public object this[string key]
{
get { return m_datareader[key]; }
}
public bool Read()
{
return m_datareader.Read();
}
~QueryResultSet()
{
m_conn.Close();
}
private SQLiteConnection m_conn;
private SQLiteDataReader m_datareader;
}
Но теперь янеобходимо изменить метод в:
public QueryResultSet(SQLiteConnection conn, string queryText, Dictionary<string,string> params)
Это приведет к удвоению кода перед методом и в него.
Любой стандартный способ сделать это?Если этот класс не является хорошей идеей, как избежать необходимости делать 10 строк для каждого запроса?