首页 > 代码库 > c#中sqlhelper类的编写(二)

c#中sqlhelper类的编写(二)

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

  

c#中sqlhelper类的编写(二)