使用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) ;";
解決掉多餘的空白!
全站熱搜
留言列表