我有一個包含產品的表。我需要查詢所有匹配結果以查找用戶輸入值。我正在使用SqlParameter
來插入輸入。使用sql參數在SQL LIKE語句中轉義特殊字符
SqlCommand findProcutsByPattern = new SqlCommand(
"SELECT *" +
" FROM [Products]" +
" WHERE ProductName LIKE @pattern", connection);
findProcutsByPattern.Parameters.AddWithValue("@pattern", '%' + pattern + '%');
問題出現在用戶輸入字符串包含'_'或'%'時,因爲它們被解釋爲特殊字符。在另一方面,考慮到這一點:
Command對象使用參數值傳遞給SQL語句或 存儲過程,提供類型檢查和驗證。與 命令文本不同,參數輸入被視爲文字值,而不是 可執行代碼。
我不應該有這樣的問題。我是否需要替換/轉義輸入字符串中的所有'_'和'%',還是有更優雅的解決方案。我希望輸入被視爲文字。
我在表中的記錄數,其中包括特殊字符的名稱(N_EW,N \ EW,N EW%,N 「EW,N'EW)指定\,」,並'作爲輸入工作正常(認爲他們是文字)。
您的查詢連接到'SELECT * FROM [Products] WHERE ProductName LIKE @ pattern'您錯過了一些空格 – 2014-09-06 18:55:04
不用擔心空格,查詢工作得很好。除了特殊字符的東西..:) – zhulien 2014-09-06 19:06:03
這個特定的查詢確實有效。但是如果用列名替換'*',那麼它就不會。但這只是未來查詢的暗示 – 2014-09-06 20:05:03