设计项目时,为了防止SQL注入,有很多种方法,一种是通过编写存储过程来防止SQL注入,使用这种方法可以提高性能,但是对于查询语句可能存在多种不同的SQL语句,这就要编写很多存储过程,还有一种方法是通过参数化,在这里只介绍一下SQL SERVER的。
先来介绍查询:
普通的查询语句(未将密码加密):
select top 1* from adminDB where username='admin' AND password ='admin'
采用参数化方式后的:
select top 1* from adminDB where username=@USERNAME AND password =@PASSWORD
具体实现:
Select:
//实例化Connection对象 我的数据库名是Management
SqlConnection connection = new SqlConnection("server=.;database=Management;uid=sa;pwd='sadasds'");
//实例化Command对象
SqlCommand command = new SqlCommand("select top 1* from adminDB where username=@USERNAME AND password=@PASSWORD);
//第一种添加查询参数的例子
command.Parameters.AddWithValue("@USERNAME", username); Management
SqlConnection connection = new SqlConnection("server=.;database=Management;uid=sa;pwd='sadasds'");
//实例化Command对象
SqlCommand command = new SqlCommand("select top 1* from adminDB where username=@USERNAME AND password=@PASSWORD);
//第一种添加查询参数的例子
command.Parameters.AddWithValue("@USERNAME", username);
command.Parameters.AddWithValue("@PASSWORD",password);
//实例化DataAdapter
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataTable data = new DataTable();
Select带like的:
string strSql = "select * from adminDB where username like '%'+ @username + '%'";
SqlParameter[] Parameters=new SqlParameter[1];
Parameters[0] = new SqlParameter("@username", username);
Select带IN:
string strSql = "select * from adminDB where username in ('+@username+')";
SqlParameter[] Parameters = new SqlParameter[1];
Parameters[0] = new SqlParameter("@add", "aa,bb,cc,dd,ee,admin,peter,sam");
本文介绍了在SQL SERVER中使用参数化查询防止SQL注入的方法。通过对比普通查询与参数化查询的区别,详细展示了如何通过实例化Connection、Command及DataAdapter对象来实现安全的数据库查询操作。
833

被折叠的 条评论
为什么被折叠?



