Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在类似Sql Server的查询中需要转义哪些字符_C#_Sql Server_Sql Parametrized Query - Fatal编程技术网

C# 在类似Sql Server的查询中需要转义哪些字符

C# 在类似Sql Server的查询中需要转义哪些字符,c#,sql-server,sql-parametrized-query,C#,Sql Server,Sql Parametrized Query,SQL server查询中的LIKE运算符对于匹配自定义模式非常有用。但是,有时需要从模式中转义某些字符或子字符串,例如,符号“%”、下划线“389;”、方括号“[”和“]”等 事实上,我正在使用,但它不能像case那样解决问题,因为例如,搜索\uuu将意味着“任何字符” 转义此类模式时必须考虑的字符集是什么?是否可以提供一个C#函数来执行安全转义?%、、、[、]和^ 这里有完整的描述 我相信你可以用C语言编写一个函数来实现这一点。请参见此处现有的stackoverflow答案 不要使用SQL

SQL server查询中的LIKE运算符对于匹配自定义模式非常有用。但是,有时需要从模式中转义某些字符或子字符串,例如,符号“%”、下划线“389;”、方括号“[”和“]”等

事实上,我正在使用,但它不能像case那样解决问题,因为例如,搜索
\uuu
将意味着“任何字符”


转义此类模式时必须考虑的字符集是什么?是否可以提供一个C#函数来执行安全转义?

%、、、[、]和^

这里有完整的描述


我相信你可以用C语言编写一个函数来实现这一点。

请参见此处现有的stackoverflow答案

不要使用SQLParameter

不要使用stringbuilder或同时添加字符串

除非您了解SQL注入攻击

看,这个问题似乎并没有解决同样的问题:我想要一套完整的字符来转义……“一组双引号”不是一个字符。在任何情况下,双引号都不需要转义。一句话就可以了,但不管它出现一次还是多次,都不会影响它的转义方式,每次都是一样的。@Starnutoditopo为什么?您不应该将参数中的字符串转义为LIKE谓词-您应该将它们作为正确的参数传入。这样就避免了任何转义的需要,也避免了SQL注入漏洞。@AaronBertrand:
LIKE
转义与值转义明显不同,不能仅仅通过参数传递来解决<代码>声明@p VARCHAR(10)='[[]]';选择1,其中“]”如@p将不返回任何内容;至少你需要像
DECLARE@p VARCHAR(10)='[\[\]]'这样的东西;在“]”处选择1,如@p ESCAPE“\”
,即使参数已参数化。@Starnutoditopo。当然,如果要在C#中构造sql字符串,则必须在代码中转义双引号,但不能在sql查询窗口中转义,因为字符串分隔符为“”。不过,不确定这是你的问题所在。你错过了
-
,需要在
[a-z]
中转义,以及转义字符本身,这是你用
转义选择的任何字符(默认情况下,没有转义字符)。@jeroenmoster,
-
不需要转义。它在方括号内的用法,即[a-e]是显而易见的,在方括号外,它被视为自身。但是,你是对的,我没有提到你必须选择一个转义字符,但是信息在链接中。对——如果你已经转义括号,
-
将永远不会在需要转义的情况下结束。如果您没有转义括号,那么您可能没有这样做,因为您想让用户能够传递模式,在这种情况下,他们将负责转义。(是的,有关转义字符的信息在链接中,但这当然不是不在答案中添加转义字符的理由。)这与问题完全无关-虽然使用参数化查询是一种良好的做法,但最多应该是注释。