在 ASP.net 应用程序的 Informix 查询中使用命名参数

Posted

技术标签:

【中文标题】在 ASP.net 应用程序的 Informix 查询中使用命名参数【英文标题】:Using named parameters in Informix queries in an ASP.net application 【发布时间】:2013-03-08 21:25:09 【问题描述】:

我正在尝试将我的查询转换为参数化,但在弄清楚语法时遇到了问题。根据 VS2012,这是没有错误的,但在运行时我得到一个错误,因为参数的值没有被替换到查询中。

示例代码如下:

IfxCommand query = new IfxCommand("SELECT slm_slmno FROM slmmas WHERE 
    slm_logon = @Logon");
query.Parameters.Add("@Logon", logon);

这是查询在运行时返回的错误:

Error Message = ERROR [42000] [Informix .NET provider][Informix]A syntax 
    error has occurred.
Sql Query = SELECT slm_slmno FROM slmmas WHERE slm_logon = @Logon

从错误中可以清楚地看出,logon 的值没有被替换到命令中。我正在使用 Informix 10.0。我查看了文档(位于 http://publib.boulder.ibm.com/infocenter/idshelp/v111/index.jsp?topic=/com.ibm.net_cc.doc/dqx1db2commandclass.htm ),但没有明确的示例显示我试图实现的简单用法。关于我需要如何更好地解决这个问题的任何建议?

【问题讨论】:

【参考方案1】:

根据http://publib.boulder.ibm.com/infocenter/idshelp/v117/index.jsp?topic=%2Fcom.ibm.netpr.doc%2Fids_net_115.htm 给出的示例,您可以如下重写您的查询:

IfxCommand query = new IfxCommand("SELECT slm_slmno FROM slmmas WHERE 
    slm_logon = ?");
IfxParameter ifxp1 = new IfxParameter("Logon",DbType.String);
query.Parameters.Add(ifxp1);
ifxp1.Value = "your value";

【讨论】:

这确实有效,因此我将其标记为有帮助,但我能够编写一个更短的方法,我已将其作为附加答案发布。我会将我的答案标记为问题的答案,以便更好地向其他用户突出显示它,但感谢您采用这种方法,因为它确实为我提供了一个可以试验的工作模型,并且是导致我发布的版本的原因。 【参考方案2】:

虽然 Vijay 的解决方案有效,但在处理多个参数时,这种方法会变得相当冗长。我能够像这样修改方法,这种方法更简单,并且更容易添加多个参数:

IfxCommand query = new IfxCommand("SELECT slm_slmno FROM slmmas WHERE 
    slm_logon = ?");
query.Parameters.Add(new IfxParameter("Logon", logon));

希望其他人会发现这很有用。

【讨论】:

【参考方案3】:

如果您正在触发 SQL 查询,另一种方法是在 C# 字符串本身中完成参数替换,并将最终的 SQL 传递给您的命令。

一个例子是 -

var sql = string.Format("SELECT slm_slmno FROM slmmas WHERE slm_logon = 0", logon);
IfxCommand query = new IfxCommand(sql);

存储过程是另一种情况,您需要查看 informix 适配器文档。

【讨论】:

使用String.Format提供参数肯定会导致sql注入攻击。 @Vijay - 是的,没想到。 String.Format 是现在代码的编写方式,而注入攻击(和转义)是我重写它的原因。 :)

以上是关于在 ASP.net 应用程序的 Informix 查询中使用命名参数的主要内容,如果未能解决你的问题,请参考以下文章

如何从 ASP.NET 脚本连接到 Informix 数据库?

在不使用 LINQ 和 EF 的情况下从 ASP.NET 切换到 ASP MVC

连接到安装了单声道的 Informix DB 时出现 ODBC 错误

从 informix DB 填充我的下拉列表时遇到问题

java开源工作流引擎jflow的流程应用类型分类讲解

ASP.NET 生命周期 – ASP.NET 应用生命周期