sql 参数化查询

 

 

  在初次接触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); //注意,此处参数应为设置完成的cmd
            DataTable dt = new DataTable();
            da.Fill(dt);
            conn.Close();
            conn.Dispose();
            return dt;
        }
        catch
        {
            return null;
        }
    }

    这是笔者自己写的一个简单的通过传入sql语句与相关参数获取相应DataTable数据的方法, 通过这种方法比为每一个需求写一个方法来得封装性更好一些。

posted @ 2017-12-16 17:27  Phoenix_Xie  阅读(7874)  评论(3编辑  收藏  举报