3

我正在尝试将我的查询转换为参数化,但在弄清楚语法时遇到了问题。根据 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)但有没有明确的例子可以显示我想要实现的简单用法。关于我需要如何更好地解决这个问题的任何建议?

4

3 回答 3

6

根据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";
于 2013-03-09T06:07:03.600 回答
2

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

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

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

于 2013-03-11T14:47:03.953 回答
-1

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

一个例子是 -

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

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

于 2013-03-09T01:53:03.343 回答