上一篇文章讲了简易版的SqlHelper类的编写,我们在这里就上一篇文章末尾提出的问题写出解决方案.
sql语句注入攻击已经是众所周知的了.我们如何在C#中保护自己的数据库不被这样的方式攻击呢?
不用担心,c#中已经提供了很好的解决方案,那就是 SqlParameter类.
如何使用它呢?
class SqlHelper{public object ExecuteScalar(string sql,Parameter [] parameters)//这一这里增加了一个参数,是个Parameter类型的数组. using(SqlConnection conn = new SqlConnection(connStr)) { conn.Open(); using(SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; foreach( Parameter param in parameters)//遍历传进来的数组,把元素一一添加到查询中 { cmd.Parameters.add(param); } SqlDataAdapter adapter = new SqlDataAdapter(cmd);//数据适配器把查询作为自己的一个属性 DataSet dataset = new DataSet();//建立缓存 adapter.Fill(dataset);//把数据存放到缓存中. return dataset;//返回数据集合 } }}
上面的例子使用了Parameter类的方法,完成对SQL语句的保护.防止了SQL注入.
但是还有一点,在方法中我们定义了一个数组作为参数,那如果用户传进来的不只是一个数组呢?
这时候就要用到可变长度参数这个概念的东西了.
可变长度参数的定义方式:
static int sum(int[] arr)//这是一个简单的固定参数长度的函数定义.{ int sum = 0; foreach(int i in arr) { result += i; } return result;}static int sum1(param int[] arr)//这是一个简单的可变参数长度的函数定义{ int result = 0; foreach(int i in arr) { result += i; } return result;}static void Main(string[],args){ int[] array1 = new int[]{1,2,3,4,5}; sum(array1);//我们用固定参数长度方法,必须传一个数组进去 sum1(2,4,6,8,10);//我们用可变参数长度方法,可以随便传数字进去,函数会自动把他们加入到自己的数组参数中.}
今天先写到这里.可变长度参数在SqlHelper里的具体使用,我会在下一篇文章里讲解.
新闻热点
疑难解答