6

我显然已经多次看到这个问题,但还没有看到一个很好的例子来说明参数化查询何时真的不是一种选择……但我想我有一个。

我正在使用 Cisco Call Manager AXL API。它的后端是一个 Informix DB。通常,只要有可能,我都会使用提供的 SOAP 方法来获取结果,因为我使用的是 WSDL 创建的接口类并在实际对象属性中传递参数,这会通过 SOAP 库处理任何必要的转义。

然而:

有一些事情我必须对数据库使用直接 SQL 调用,并且 API 提供了一种方法,您可以在其中传递 SQL 查询(作为字符串)并取回结果行。不幸的是,这种方法没有为参数化查询提供任何便利。所以,是的,我实际上需要自己做 escaping

那么,我当然可以制作自己的正则表达式,但是 A:我很容易错过一些东西,而 B:真的吗?这没有实用程序类吗?我可以以某种方式使用 SQL 参数化引擎吐回转义的查询吗?显然我知道你必须处理',但是我已经阅读了退格字符注入方法,而且我确定还有其他我还不知道的方法……肯定其他人已经编写了一个非常安全的版本?

范围:

  • 我对使用现成库的解决方案感兴趣,最好是内置库。
  • 如果我必须自己写,我可以使用上面链接和其他地方的示例,但我真的不想自己写,所以让我们尽量不要告诉我如何去做。
  • 不,我不能直接连接到 Informix DB 并使用具有参数化查询支持的 Informix 驱动程序。这将是一个很好的答案,但在这种情况下被排除在外。
4

2 回答 2

2

EscapeSequence如果 MsSql 转义与您的数据库后端使用的内容足够接近,则您可以使用 Microsoft.SqlServer.Management.SqlParser.dll 中的类。

您可以在此处找到有关它的更多信息。http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.sqlparser.parser.escapesequence.aspx

于 2014-06-05T13:38:57.023 回答
0

ADO.NET 抽象不处理引号,它只是将它们传递给底层提供程序。因此,如果有一个现成的库,那将是一个特定于 Informix DB 的库,但我怀疑你会找到一个用于 .NET 的库,因为每个人都对 ADO.NET 或更高的抽象感到满意。

即使是以其mysql_real_escape_string功能而闻名的 PHP,似乎也没有 Informix DB 的等价物。

考虑到您的范围,我只能说,很想尝试帮助解决您的问题。

于 2014-06-05T12:33:25.773 回答