日期:2014-05-18  浏览次数:20817 次

数据库注入
SqlParameter[] parr = new SqlParameter[1];
  parr.SetValue(new SqlParameter("@orgname", strCorpName), 0);
  string strSql = "select * from Organization where orgName = @orgname and isValid = 'True'";
  DataTable dt = SqlHelper.ExecuteDataset(XMLWriter.GetSingleSettingValue("DBConnectionString"), CommandType.Text, strSql, parr).Tables[0];
求大神解释整个意思,特别是数字参数,谢谢

------解决方案--------------------
参数化嘛 就是这样 防注入
------解决方案--------------------
// 创建一个Sql参数类对象
SqlParameter[] parr = new SqlParameter[1];
// 设置他的值,默认是字符串类型的
parr.SetValue(new SqlParameter("@orgname", strCorpName), 0);
// 这个是ADO。NET的读取Sql的方式,@开头就是参数,不是纯sql方式的
string strSql = "select * from Organization where orgName = @orgname and isValid = 'True'";
// 读取一个DT,参数:sql连接串,类型是Text,sql语句,对应的sql参数
DataTable dt = SqlHelper.ExecuteDataset(XMLWriter.GetSingleSettingValue("DBConnectionString"), CommandType.Text, strSql, parr).Tables[0];
 
这种方式的执行sql,ADO。NET会有很多容错检查,可以较为有效防止注入,但是不是100%