使用Sqlparameter的方式可以有效的避免Sql Injection的攻擊,所以在做資料Filter時,也儘量使用Sqlparameter
的功能。

一般使用Like查,當然少不了 % 這個指示符。

加上 % 有二種寫法

其一:

cmd.commandText="Select * From Emp Where EmpName like @EmpName ;"; 
cmd.parameters.add("@EmpName",sqldvtype.nvarchar,20).value= "%" + txtEmpName.Text.Trim() + "%"; //過濾前後空白 

其二: 

cmd.commandText="Select * From Emp Where EmpName like  '%' + @EmpName + '%';";
cmd.parameters.add("@EmpName",sqldvtype.nvarchar,20).value=txtEmpName.Text.Trim() ; //過濾前後空白 

以上是Like的基本寫法,但請注意到上方粗體的部份,是用nvarchar,所以傳進去的字串是已經濾掉空白字串(varchar亦同)

如果成天改成 char 或是 nchar ,情況就不一樣了!

假設 txtEmpName.Text 的值為 "王大明",EmpName 為 nvarchar(10)

在SqlProfiler中會看見它的組合語法為 @EmpName ='%王大明%'

如果是 nchar(10) 就會變成 @EmpName ='%王大明%     ' 有看見變數中,受到char(10)影嚮,而補進去的空白嗎???

就在努力的裝上 Sql Profiler後,終於發現了這個安全性超強的 Sqlparameter所帶來的安全性!

為了要使用Sqlparameter的安全,又要避免sql 組裝的問題,

最後的解法方式為:cmd.commandText="Select * From Emp Where EmpName like rtrim(@EmpName) ;";

解決掉多餘的空白!

arrow
arrow
    全站熱搜

    ikaritw 發表在 痞客邦 留言(8) 人氣()