我已经多次看过这个问题,但是看不到参数化查询真正不是一个选项的好例子......但我认为我有一个。
我正在使用Cisco Call Manager AXL API。它的后端是一个Informix DB。通常,只要有可能,我使用提供的SOAP方法来获取结果,因为我使用WSDL创建的接口类并在实际对象属性中传递参数,因此它负责通过SOAP库进行必要的转义。
然而:
我必须对数据库使用直接SQL调用,并且API提供了一种方法,您可以传入SQL查询(作为字符串)并返回结果行。不幸的是,这种方法不能为参数化查询提供任何便利。所以,是的,我实际上需要做我自己的逃避。
那么,当然我可以制作自己的正则表达式,但是A:我很容易错过一些东西,而且B:真的吗?这不是一个实用工具类吗?我可以以某种方式使用SQL参数化引擎来吐出转义的查询吗?显然我知道你必须处理'
,但我已经读过关于backspace-character injection method的内容,而且我确定还有其他一些我还不知道的......当然别人已经写了一个非常安全的版本?
范围:
答案 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的等价物。
试图帮助解决您的问题,考虑到您的范围,我可以说。