您的位置:首页 > 数据库

防止SQL注入的方法

2010-12-08 11:36 190 查看
//方法一:参数化查询。缺点:增大数据库的压力
string ConnectionString="";//数据库连接字串
string CustomerID = string.Empty;
string CompanyName =string.Empty;
string Address =string.Empty;
using (SqlConnection cn = new SqlConnection(ConnectionString))
{
cn.Open();
SqlCommand cmd = new SqlCommand("insert into Customers(CustomerID,CompanyName,Address) values(@CustomerID,@CompanyName,@Address)", cn);
//cmd.Parameters.Add(new SqlParameter("@CustomerID", CustomerID)); 不会去与数据库匹配
cmd.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, CustomerID);//这种设置的数据类型,长度都必须与数据库字段一致
cmd.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 40, CompanyName);
cmd.Parameters.Add("@Address", SqlDbType.NVarChar, 60, Address);
cmd.ExecuteNonQuery();
cn.Close();
}

//方法二:过滤输入的信息,检查是否存在危险字符。不必连接数据库
/// <summary>
/// 检查输入的数据 是否存在危险字符
/// </summary>
/// <param name="sUser"></param>
/// <param name="sPwd"></param>
/// <returns>返回一个bool值</returns>
public bool CheckData(string sUser, string sPwd)
{
if (sUser.IndexOf("'") != -1 || sPwd.IndexOf("%") != -1)
{
return false;
}
return true;
}
//方法三:使用存储过程(简单代码)
string ConnectionString = "";//数据库连接字串
string CustomerID = string.Empty;
string CompanyName = string.Empty;
string Address = string.Empty;
using (SqlConnection cn = new SqlConnection(ConnectionString))
{
cn.Open();
string Sql = "InsertUserProc";//存储过程名
SqlCommand cmd = new SqlCommand(Sql,cn);
cmd.CommandType = CommandType.StoredProcedure;

cmd.ExecuteNonQuery();
cn.Close();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: