上一篇文章講了簡易版的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裡的具體使用,我會在下一篇文章裡講解.