上一篇文章讲了简易版的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里的具体使用,我会在下一篇文章里讲解.