想我查詢一個SQL Server DB爲行基於其價值通過Windows格式的文本輸入提供一列LIKE
的比較計數。由於可能的用戶輸入導致注入,因此在這裏使用參數很重要。最後,我對一個實例化對象SqlCommand
我命名爲cmd
上執行的成員函數ExecuteScalar()
,但我第一次添加的參數。例如:處理的參數值的特殊字符的LIKE比較
cmd.Parameters.AddWithValue("@param1", textBox1.Text);
SQL Server使用作爲通配符匹配的LIKE
比較特殊字符%
。我想要做的是允許用戶使用*
來代替通配符。因此,一個簡單的替換:
textBox1.Text.Replace('*','%');
的問題是我遇到的問題與含特殊符號%
和_
值。搜索文字%
而不是將其用作通配符的一種方法是將其括在方括號中:[%]
。
所以,現在我的更換有可能成爲:
textBox1.Text.Replace("%","[%]").Replace("_","[_]").Replace('*','%');
順序是這裏同樣重要,因爲如果最後的Replace
作了越早%
會被錯誤地處理。
我不知道我已經介紹了我的所有基地,是否有其他字符,我需要約在這裏擔心呢?這真的能防止注射嗎?是否還有其他一些首選的方式?
一個例子查詢可能是這樣的:
SELECT COUNT(*) FROM [MyTable] WHERE [Column1] = @param1
哪裏MyTable
是你的表名和Column1
是內MyTable
有效的列名。我們可以假設Column1
是一些nvarchar
類型。
你能告訴哪裏該參數將要使用的SQL語句? – 2012-08-16 14:16:10
@AaronBertrand最後把它放在了一邊,它會是超級基礎。 – user17753 2012-08-16 14:18:57
正確,但是這是在C#中構建的SQL語句還是您將參數傳遞給存儲過程? – 2012-08-16 14:19:26