Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.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#仅限双引号转义字符_C#_Sql - Fatal编程技术网

C#仅限双引号转义字符

C#仅限双引号转义字符,c#,sql,C#,Sql,我正在尝试使用转义字符“来构造一个SQL字符串,如下所示: selSQL += " WHERE [" + sFieldArr[i, 0] + "]" + op + "\"" + sFieldArr[i, 1] + "\""; 例如,它不断错误地生成字符串 WHERE [State]=\"Illinois\" 我应该如何在这里转义双引号 更新:正如注释中指出的,转义字符实际上工作正常,只是在调试器中似乎工作不正常。问题是SQL Server将其解释为列名-请参阅本文: 解决方案是使用两个单引号

我正在尝试使用转义字符“来构造一个SQL字符串,如下所示:

selSQL += " WHERE [" + sFieldArr[i, 0] + "]" + op + "\"" + sFieldArr[i, 1] + "\"";
例如,它不断错误地生成字符串

WHERE [State]=\"Illinois\"
我应该如何在这里转义双引号

更新:正如注释中指出的,转义字符实际上工作正常,只是在调试器中似乎工作不正常。问题是SQL Server将其解释为列名-请参阅本文:

解决方案是使用两个单引号而不是一个双引号。

如上所述,您可以使用带有两个双引号的at符号:

selSQL += " WHERE [" + sFieldArr[i, 0] + "]" + op + @"""" + sFieldArr[i, 1] + @"""";
输出:

WHERE [State]="Illinois"

您可以使用逐字字符串文字来转义它

@" WHERE [" + sFieldArr[i, 0] + "]" + op + @"""" + sFieldArr[i, 1] + @"""";
或者如果你想用常规的方式

" WHERE [" + sFieldArr[i, 0] + "]" + op + "\""" + sFieldArr[i, 1] + "\""";
正如您对
sFieldArr
值所述,它们应该返回

WHERE [State]="Illinois"
但对于你的情况,我建议你做以下几点

selSQL += String.Format(@" WHERE [{0}] {1} ""{2}""", sFieldArr[i, 0], op, sFieldArr[i, 1]);

对于SQL查询,最好使用参数化查询。尽管如此,您可以尝试使用@sign在不使用参数化查询的情况下进行查询。如
@“”“
?这实际上做了同样的事情…我还需要看更多的代码示例。当我在C#studio 2015中构建字符串时,很好,您已经正确地转义了双引号。您如何实际检查它是否生成了错误的字符串?从VisualStudio中的调试器?或者你真的执行了这个查询?这是因为VS中的调试器将始终显示\“我会修改您的语句:选择并不是基于用户输入的,但是。编写代码时,默认情况下是安全的,设计时是安全的。