.net参数化

在我们项目中使用sql语句来查询数据的时候,对于新手来说,不会考虑sql注入等一系列可能存在的问题,那么可能就是用最容易被攻击的方式来。这样写出来的项目很容易被注入攻击,从而使你的数据库受到威胁。

那么接下来我就记录下我用到的sql语句参数化。首先我不会直接去拼接字符串,因为这样很容易就被注入攻击,所以我自写了一个方法类,sql语句中放入参数。在查询语句里放入对应参数,这样就很大程度上避免了被注入的可能。接下来直接上代码,不懂的可以留言交流。

    sql = " select * from 表名 where CarNum like @carNums or ApplyName like @carNums"; //定义参数@carNums
SqlParameter[] parameters = {
                new SqlParameter("@carNums","%"+carNums+"%")  //模糊查询在参数化赋值这里写入,避免sql语句内认为你的参数是字符串
        };
设置参数为@carnums ,进行赋值  然后查询语句引用相应查询或增删改方法,带入语句跟参数集合
  foreach (SqlParameter item in parameters)
            {
                if (item.Value == null)
                {
                    item.Value = DBNull.Value;
                }
            }  //防止出现Null 这里做一个判断
    DataTable data = DBHelp.ExecuteDataTable(sql, parameters); //查询数据

/// 查询 ///
///
///
///
pub­lic sta­t­ic DataT­able ExecuteDataTable(string sql, params Sql­Pa­ra­me­ter[] para­me­ters)
{
String con­nec­tion­String = lian;
Sql­Con­nec­tion conn = null;
using (conn = new SqlConnection(connectionString))
{
conn.Open();
Sql­Com­mand cmd = conn.CreateCommand();
cmd.CommandText = sql;
//cmd.Parameters.Clear();
fore­ach (Sql­Pa­ra­me­ter para­me­ter in para­me­ters)
{
cmd.Parameters.Add(parameter);
}
DataSet dataset = new DataSet();
Sql­DataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dataset);
DataT­able dt = dataset.Tables[0];
cmd.Parameters.Clear();//最后清空集合 因为重复使用会造成之前的集合未被清理,无法插入新的数据
return dt;
}
}

/// /// 增删改 /// 
///
///
///
pub­lic sta­t­ic bool ExecuteUpdate(string sql, params Sql­Pa­ra­me­ter[] parameters)
{
String con­nec­tion­String = lian;
Sql­Con­nec­tion conn = null;
using (conn = new SqlConnection(connectionString))
{
conn.Open();
Sql­Com­mand cmd = conn.CreateCommand();
cmd.CommandText = sql;
//cmd.Parameters.Clear();
fore­ach (Sql­Pa­ra­me­ter para­me­ter in parameters)
{
cmd.Parameters.Add(parameter);
}
Sql­DataAdapter adapter = new SqlDataAdapter(cmd);

            int i = cmd.ExecuteNonQuery();
            cmd.Parameters.Clear(); //最后清空集合
            return i>0;
        }
     }

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注