通过 ADO.Net 命令调用 Informix 存储过程的最佳/正确方法?

Posted

技术标签:

【中文标题】通过 ADO.Net 命令调用 Informix 存储过程的最佳/正确方法?【英文标题】:Best/Correct way to call an Informix stored procedure via ADO.Net Command? 【发布时间】:2011-12-13 09:18:45 【问题描述】:

我有一个 Informix 数据库,它公开了一些存储过程,我有一个抽象的数据访问器来处理与它们的通信,但我有一个空值问题。

直接调用即可:

execute procedure some_stored_procedure(1,2,NULL,3)

并获得正确的结果,我宁愿没有这个可为空的字段,但它不在我的手中。无论如何,我最初试图这样称呼它:

var command = connection.CreateCommand();
command.CommandType = CommandTypes.StoredProcedure
command.CommandText = "some_stored_procedure"
// Pass in the parameters

但是这样做会导致 Informix 抛出语法错误,所以我不得不选择:

var command = connection.CreateCommand();
command.CommandText = "execute procedure some_stored_procedure(?,?,?,?)";
// Pass in parameters

哪个有效但从不传回正确的结果,如果我尝试将参数 3 设为 null,它会给出另一个语法错误。我错过了什么还是有更好的方法来调用这些存储过程?

【问题讨论】:

【参考方案1】:

尝试参数化参数(如果使用 odbcdriver,您可以使用 OdbcParameters),然后在需要 Null 的地方传递 DbNull.Value

试试这个:

var command = connection.CreateCommand(); 
command.CommandType = CommandTypes.Text;
command.CommandText = "call some_stored_procedure(?,?,?,?)";

command.Parameters.Add(param); //add all your parameters.

【讨论】:

【参考方案2】:

查询格式如下:

        strQuery = string.Format("EXECUTE PROCEDURE Cronos_UpdateStateLegacyProduct (0)", oValidityProducts.PurchaseId);

        OdbcConnection oConnection = new OdbcConnection(this.strConnectionString);
        OdbcCommand oCommand = new OdbcCommand();
        oCommand.CommandType = CommandType.StoredProcedure;
        oCommand.CommandText = strQuery;
        oCommand.Connection = oConnection;

        oConnection.Open();

        intResult = oCommand.ExecuteNonQuery();

最好的问候

【讨论】:

【参考方案3】:

如果您使用的是 ODBC 连接,则在使用 CommandType.StoredProcedure 时,您必须对过程名称使用不同的语法。在你的情况下:

CommandText = " CALL some_stored_procedure(?,?,?,?)"

查看此链接了解更多信息:https://support.microsoft.com/en-us/kb/310130

【讨论】:

以上是关于通过 ADO.Net 命令调用 Informix 存储过程的最佳/正确方法?的主要内容,如果未能解决你的问题,请参考以下文章

ADO.NET 中参数化 SQL 命令的最终形式

C#:通过 ADO.NET 在 SQL Server 2008 上运行事务

ADO.net是啥?通过ADO. NET连接到数据库,提取数据,一般需要哪对象?

Informix 中执行多条SQL(Execute Script)

ADO.NET 学习

如何使用 ado.net 调用存储过程