上一篇文章講了簡(jiǎn)易版的SqlHelper類(lèi)的編寫(xiě),我們?cè)谶@里就上一篇文章末尾提出的問(wèn)題寫(xiě)出解決方案.
sql語(yǔ)句注入攻擊已經(jīng)是眾所周知的了.我們?nèi)绾卧贑#中保護(hù)自己的數(shù)據(jù)庫(kù)不被這樣的方式攻擊呢?
不用擔(dān)心,c#中已經(jīng)提供了很好的解決方案,那就是 SqlParameter類(lèi).
如何使用它呢?
class SqlHelper{public object ExecuteScalar(string sql,Parameter [] parameters)//這一這里增加了一個(gè)參數(shù),是個(gè)Parameter類(lèi)型的數(shù)組. using(SqlConnection conn = new SqlConnection(connStr)) { conn.Open(); using(SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; foreach( Parameter param in parameters)//遍歷傳進(jìn)來(lái)的數(shù)組,把元素一一添加到查詢中 { cmd.Parameters.add(param); } SqlDataAdapter adapter = new SqlDataAdapter(cmd);//數(shù)據(jù)適配器把查詢作為自己的一個(gè)屬性 DataSet dataset = new DataSet();//建立緩存 adapter.Fill(dataset);//把數(shù)據(jù)存放到緩存中. return dataset;//返回?cái)?shù)據(jù)集合 } }}上面的例子使用了Parameter類(lèi)的方法,完成對(duì)SQL語(yǔ)句的保護(hù).防止了SQL注入.
但是還有一點(diǎn),在方法中我們定義了一個(gè)數(shù)組作為參數(shù),那如果用戶傳進(jìn)來(lái)的不只是一個(gè)數(shù)組呢?
這時(shí)候就要用到可變長(zhǎng)度參數(shù)這個(gè)概念的東西了.
可變長(zhǎng)度參數(shù)的定義方式:
static int sum(int[] arr)//這是一個(gè)簡(jiǎn)單的固定參數(shù)長(zhǎng)度的函數(shù)定義.{ int sum = 0; foreach(int i in arr) { result += i; } return result;}static int sum1(param int[] arr)//這是一個(gè)簡(jiǎn)單的可變參數(shù)長(zhǎng)度的函數(shù)定義{ 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);//我們用固定參數(shù)長(zhǎng)度方法,必須傳一個(gè)數(shù)組進(jìn)去 sum1(2,4,6,8,10);//我們用可變參數(shù)長(zhǎng)度方法,可以隨便傳數(shù)字進(jìn)去,函數(shù)會(huì)自動(dòng)把他們加入到自己的數(shù)組參數(shù)中.}今天先寫(xiě)到這里.可變長(zhǎng)度參數(shù)在SqlHelper里的具體使用,我會(huì)在下一篇文章里講解.
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注