当前位置: 首页 > 编程语言 > C#

使用sql参数转义SQLLIKE语句中的特殊字符分享

时间:2023-04-11 01:17:52 C#

使用sql参数转义SQLLIKE语句中的特殊字符我有一个??包含产品的表。我需要一个查询来查找与用户输入值匹配的所有结果。我正在使用SqlParameter来插入输入。SqlCommandfindProcutsByPattern=newSqlCommand("SELECT*"+"FROM[Products]"+"WHEREProductNameLIKE@pattern",连接);findProcutsByPattern.Parameters.AddWithValue("@pattern",'%'+pattern+'%');当用户输入的字符串包含“_”或“%”时会出现问题,因为它们被解释为特殊字符。另一方面,考虑一下:命令对象使用参数将值传递给SQL语句或存储过程,从而提供类型检查和验证。与命令文本不同,参数输入被视为文字值,而不是可执行代码。我不应该有这样的问题。我是否需要替换/转义输入字符串中的所有“_”和“%”,或者是否有更优雅的解决方案。我希望输入被视为文本。我在表中有一些记录,其中包含名称中的特殊字符(N_EW、NEW、N%EW、N"EW、N'EW)。指定"和'作为输入工作正常(将它们视为文字)。您有两种选择:在这两种情况下,我都建议在应用程序层进行替换,但如果您确实需要,也可以在SQL中进行:wherepatternlikereplace(@pattern,'%','[%]')并且,就UI而言,让最终用户访问通配符可能是一件好事。注意:LIKE查询中也有一些特殊字符'-'和'^',但是如果你已经转义了'['和']'就不需要转义它们了。通常,手动转义值被认为是SQL中的不良做法,因为使用参数是首选(且更安全)的解决方案。但是,在您的示例中,您已经在使用参数并希望使用LIKE运算符,因此手动转义字符应该没问题。不要忘记转义转义字符-请参阅https://stackoverflow.com/a/13861567/232175了解一些代码。您可以通过在SQL字符串中指定一个显式转义字符,然后将该转义添加到用户输入的字符串中的所有%和_字符之前来执行此操作:SqlCommandfindProcutsByPattern=newSqlCommand(@"SELECT*FROM[Products]WHEREProductNameLIKE@pattern",connection)ESCAPE'_'"设置参数时,将_和%的所有实例替换为__和_%:varescapedPattern=Regex.Replace(pattern,"[%_]","_$0");Demo.所以,基本上,我手动转义(替换)了所有通配符,现在似乎工作正常。这是最终代码。SqlCommandfindProcutsByPattern=newSqlCommand("SELECT*"+"FROM[Products]"+"WHEREProductNameLIKE@pattern",connection);字符串patternEscaped=pattern.Replace("_","[_]");patternEscaped=patternEscaped.Replace("%","[%]");patternEscaped=patternEscaped.Replace("[","[[]");findProcutsByPattern.Parameters.AddWithValue("@pattern",'%'+patternEscaped+'%');感谢支持!更新:我明白了...escape_character是放在前面的字符通配符表示通配符应被解释为常规字符而不是通配符。escape_character是一个没有默认值的字符表达式,并且只能计算为一个字符。所以你还是要逃避自己。以上就是C#学习教程:使用sql参数转义SQLLIKE语句中的特殊字符分享全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收集,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: