在ASP.net应用程序中的Informix查询中使用命名参数
本文关键字:参数 查询 Informix ASP net 应用程序 | 更新日期: 2023-09-27 18:03:15
我试图将我的查询转换为参数化,但我有问题,找出语法。根据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),但是没有清晰的例子显示我试图实现的简单用法。有什么建议我需要更好地解决这个问题吗?
根据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";
尽管Vijay的解决方案有效,但在处理多个参数时,这种方法会变得相当冗长。我能够像这样修改方法,这是更最小的,将更容易添加多个参数:
IfxCommand query = new IfxCommand("SELECT slm_slmno FROM slmmas WHERE
slm_logon = ?");
query.Parameters.Add(new IfxParameter("Logon", logon));
如果您正在触发SQL查询,另一种方法是使用c#字符串本身完成参数替换,并将最终的SQL传递给您的命令。
一个例子是-
var sql = string.Format("SELECT slm_slmno FROM slmmas WHERE slm_logon = {0}", logon);
IfxCommand query = new IfxCommand(sql);
存储过程是不同的情况,您需要查看informix适配器文档。