当你真的不能使用参数时,如何转义SQL查询的字符串

时间:2014-06-05 10:56:47

标签: c# asp.net .net cisco-axl

我已经多次看过这个问题,但是看不到参数化查询真正不是一个选项的好例子......但我认为我有一个。

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

然而:

我必须对数据库使用直接SQL调用,并且API提供了一种方法,您可以传入SQL查询(作为字符串)并返回结果行。不幸的是,这种方法不能为参数化查询提供任何便利。所以,是的,我实际上需要做我自己的逃避

那么,当然我可以制作自己的正则表达式,但是A:我很容易错过一些东西,而且B:真的吗?这不是一个实用工具类吗?我可以以某种方式使用SQL参数化引擎来吐出转义的查询吗?显然我知道你必须处理',但我已经读过关于backspace-character injection method的内容,而且我确定还有其他一些我还不知道的......当然别人已经写了一个非常安全的版本?

范围:

  • 我对使用现成库的解决方案感兴趣,最好是内置库。
  • 如果我必须自己编写,我可以使用上面和其他地方的链接中的示例,但我真的不想写自己的,所以让我们试着不要告诉我该怎么做。
  • 不,我无法直接连接到Informix数据库并使用带参数化查询支持的Informix驱动程序。这将是一个很好的答案,但在这种情况下它被排除了。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

即使是因其mysql_real_escape_string函数而闻名的PHP似乎也没有Informix DB的等价物。

试图帮助解决您的问题,考虑到您的范围,我可以说。