C#中的SQL – 为什么这么详细?
发布时间:2020-12-15 23:59:52 所属栏目:百科 来源:网络整理
导读:我在 PHP中使用了postgreSQL,这很简单:当你进行查询时,你会这样做: $result = pg_query($conn,"SELECT author,email FROM authors WHERE dest='" + pg_escape_string($s) + "'"); 简单.安全(据我所知). 现在我想在C#中使用SQLite做同样的事情: SQLiteComm
我在
PHP中使用了postgreSQL,这很简单:当你进行查询时,你会这样做:
$result = pg_query($conn,"SELECT author,email FROM authors WHERE dest='" + pg_escape_string($s) + "'"); 简单.安全(据我所知). 现在我想在C#中使用SQLite做同样的事情: 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行? 解决方法
我使用扩展方法
public static IDataReader GetReader(this IDbConnection conn,string query,params object[] values) { var Command=conn.CreateCommand(); var paramNames=Enumerable.Range(1,values.Length).Select(i=>string.Format("@param{0}",i)).ToArray(); Command.CommandText=string.Format(query,paramNames); for (var i=0;i<values.Length;i++) { var param=Command.CreateParameter(); param.ParameterName=paramNames[i]; param.Value=values[i]; Command.Parameters.Add(param); } return Command.ExecuteReader(); } 然后,您可以在代码中使用字符串格式语法进行查询. 例如 Conn.GetReader("SELECT author,email FROM authors WHERE dest={0}",dest); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |