在初次接触sql时,笔者使用的是通过字符串拼接的方法来进行sql查询,但这种方法有很多弊端
其中最为明显的便是导致了sql注入。
通过特殊字符的书写,可以使得原本正常的语句在sql数据库里可编译,而输入者可以达到某些非法企图甚至能够破坏数据库。
而参数化查询有效解决了这个问题,参数化查询是通过将传入的sql语句其他部分进行编译后再将其需要查询的数据插入其中然后查询,防止了在被查询信息中出现语句的情况。
具体代码例子如下:
/// <summary>/// 通用sql获得语句,在第一个参数传入sql语句,接下来以此写入在sql中参数化的位置与需要用于替代的字符/// </summary>/// <param name="sqlstring"></param>/// <param name="items"></param>以数组方式传入可同时对sql语句多个位置进行赋值/// <returns></returns>public DataTable Sql_Get_Datatable(string sqlstring, params string[] items){string database = database_global;string str = @"server=DESKTOP-8ROVJ5G;Integrated Security=SSPI;database=" + database;//Integrated Security 综合安全,集成安全try{string ConnectionString = @"server=DESKTOP-8ROVJ5G;Integrated Security=SSPI;database=" + database;SqlConnection conn = new SqlConnection(ConnectionString);conn.Open();SqlCommand cmd = new SqlCommand(); //生成新的连接 cmd.Connection = conn;int i;for (i = 0; i < items.Length; i += 2) //循环替换字符串中相应位置的参数,一个@something 对应一个 somenting {cmd.Parameters.Add("@"+items[i], SqlDbType.VarChar);cmd.Parameters["@" + items[i]].Value = items[i+1]; } SqlDataAdapter da = new SqlDataAdapter(cmd); //注意,此处参数应为设置完成的cmdDataTable dt = new DataTable();da.Fill(dt);conn.Close();conn.Dispose();return dt;}catch{return null;}}
这是笔者自己写的一个简单的通过传入sql语句与相关参数获取相应DataTable数据的方法, 通过这种方法比为每一个需求写一个方法来得封装性更好一些。