zhu*_*ien 4 c# sql sql-server escaping sqlparameter
我有一张包含产品的表格.我需要查询查找所有匹配结果到用户输入值.我SqlParameter用于插入输入.
SqlCommand findProcutsByPattern = new SqlCommand(
"SELECT *" +
" FROM [Products]" +
" WHERE ProductName LIKE @pattern", connection);
findProcutsByPattern.Parameters.AddWithValue("@pattern", '%' + pattern + '%');
Run Code Online (Sandbox Code Playgroud)
当用户输入字符串包含'_'或'%'时,问题就出现了,因为它们被解释为特殊字符.另一方面,考虑到这一点:
命令对象使用参数将值传递给SQL语句或存储过程,从而提供类型检查和验证.与命令文本不同,参数输入被视为文字值,而不是可执行代码.
我不应该有这样的问题.我是否需要替换/转义输入字符串中的所有'_'和'%',或者是否有更优雅的解决方案.我希望输入被视为文字.
我在表中有一些记录,其中包括名称中的特殊字符(N_EW,N\EW,N%EW,N"EW,N'EW).指定\,"和'作为输入工作正常(考虑它们)作为文字).
您有两种选择:
它们括[和].所以:
where pattern like '[%]'
Run Code Online (Sandbox Code Playgroud)
查找百分比字符.要转义的完整字符列表 - '_', '%', '[', ']'具有相应的替换'[_]', '[%]', '[[]', '[]]'.可以在Escaping中找到示例代码,转义字符不起作用 - SQL LIKE运算符
使用不太可能在字符串中的转义字符,例如反引号:
where pattern like '`%' escape '`'
Run Code Online (Sandbox Code Playgroud)
(请参阅MSDN上的语法 - LIKE(Transact-SQL).)
在这两种情况下,我建议您在应用程序层中进行替换,但如果您真的需要,也可以在SQL中执行:
where pattern like replace(@pattern, '%', '[%]')
Run Code Online (Sandbox Code Playgroud)
并且,在用户界面方面,让最终用户访问通配符可能是一件好事.
注:有几个比较特殊的字符'-',并'^'在LIKE查询,但他们并不需要,如果你已经逃离转义'['和']'.
| 归档时间: |
|
| 查看次数: |
10472 次 |
| 最近记录: |