Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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中的各种字符_C#_Sql_Escaping_Character - Fatal编程技术网

C# 从变量中转义C SQL中的各种字符

C# 从变量中转义C SQL中的各种字符,c#,sql,escaping,character,C#,Sql,Escaping,Character,我正在开发一个连接到access数据库的C表单应用程序。这个数据库的一部分不在我的控制范围内,特别是一个包含带、和其他类似字符的字符串的部分。不用说,这会打乱一些查询,因为我需要使用该列来选择其他数据段。这只是一个桌面表单应用程序,问题在于导出器函数,所以不必担心SQL注入或其他类似的事情。当我使用可能包含引号的变量并将其与Access数据库中存储的内容相匹配时,如何告诉这件事忽略查询中的引号之类的内容 例如,我从一行中提取了几列。其中一个可能是: 大直径3-1/16 你明白了。引号正在打断查询

我正在开发一个连接到access数据库的C表单应用程序。这个数据库的一部分不在我的控制范围内,特别是一个包含带、和其他类似字符的字符串的部分。不用说,这会打乱一些查询,因为我需要使用该列来选择其他数据段。这只是一个桌面表单应用程序,问题在于导出器函数,所以不必担心SQL注入或其他类似的事情。当我使用可能包含引号的变量并将其与Access数据库中存储的内容相匹配时,如何告诉这件事忽略查询中的引号之类的内容

例如,我从一行中提取了几列。其中一个可能是:

大直径3-1/16


你明白了。引号正在打断查询。我目前正在使用OleDb挖掘数据库,直到现在才发现问题。如果可以帮助的话,我不想把我目前所做的事情消化掉,至少在我准备好进行适当的重构之前是这样。

至少对于单引号来说,添加另一个引号似乎是可行的:变成”


即使注射不应该是一个问题,我仍然会考虑使用。最后,它们是更简单的选择,因为它们避免了许多不可预见的问题,注入只是其中之一。

至少对于单引号,添加另一个引号似乎有效:变成”


即使注射不应该是一个问题,我仍然会考虑使用。归根结底,它们是更简单的选择,因为它们避免了许多不可预见的问题,注入只是其中之一。

这实际上并不像您看到的那么大问题:只是不要通过将SQL查询构建为普通字符串来处理它们。使用SqlCommand类和查询参数。这样,SQL引擎将为您正确地转义所有内容,因为它将知道要直接读取的代码是什么,以及要转义的参数值是什么。

这实际上并不像您看到的那么大问题:只是不要通过将SQL查询构建为纯字符串来处理它们。使用SqlCommand类和查询参数。这样,SQL引擎将为您正确地转义所有内容,因为它将知道要直接读取的代码是什么,以及要转义的参数值是什么;看

防止这些攻击的最简单方法是使用查询参数


您正试图防止SQL注入攻击;看

防止这些攻击的最简单方法是使用查询参数


因此,当我阅读您的问题时,您正在将查询构建为C中的字符串,连接已查询的列值,结果字符串要么不再是C中的字符串,要么与access数据库中的内容不匹配

如果问题出在C中,我想你需要一些转义函数,比如

stringvar += escaped(columnvalue)
...
private static void escaped(string cv) as string {
  //code to put \ in front of problem characters in cv
}
如果问题在access中,则

“逃脱” 逃脱

&您可以将包含“…”的列值放入其中,它应该可以工作

然而,我真正的想法是,您尝试运行的SQL可能会更好地重新构造,使用子查询来获得匹配的值,然后您只需将列名与列名进行比较


如果您发布了更多关于您正在生成的查询的信息,以及一些关于表结构的提示,我将尝试进一步提供帮助-或者其他人一定能够为您提供一些建设性的信息,尽管您可能需要根据Jet SQL语法对其进行调整,您正在将查询构建为C中的字符串,连接已查询的列值,结果字符串要么不再是C中的字符串,要么与access数据库中的内容不匹配

如果问题出在C中,我想你需要一些转义函数,比如

stringvar += escaped(columnvalue)
...
private static void escaped(string cv) as string {
  //code to put \ in front of problem characters in cv
}
如果问题在access中,则

“逃脱” 逃脱

&您可以将包含“…”的列值放入其中,它应该可以工作

然而,我真正的想法是,您尝试运行的SQL可能会更好地重新构造,使用子查询来获得匹配的值,然后您只需将列名与列名进行比较


如果您发布了一些关于您正在生成的查询的详细信息,以及一些关于表结构的提示,我将尝试进一步提供帮助-或者其他人一定能够为您提供一些建设性的信息,尽管您可能需要根据Jet SQL语法对其进行调整

完全不清楚。试着给出一些例子,说明它是如何搞砸的,以及你期望它会发生什么,更好的是,使用一个ORM为你处理它,即LINQ到SQL。完全不清楚。试着给出一些例子,说明它是如何搞砸的,以及您希望它能做些什么,更好的是,使用一个ORM为您处理它,即LINQ to SQL。