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