我有一个包含产品的表。我需要查询所有匹配结果以查找用户输入值。我正在使用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