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

本文关键字:方法 命令 最佳 ADO 调用 Informix 存储过程 通过 | 更新日期: 2023-09-27 18:17: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为空,它给出了另一个语法错误。是我遗漏了什么,还是有更好的方法来调用这些存储过程?

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

尝试参数化参数(如果使用odbcdriver,您可以使用OdbcParameters),然后传递DbNull.Value,其中需要Null。

试试这个:

var command = connection.CreateCommand(); 
command.CommandType = CommandTypes.Text;
command.CommandText = "call some_stored_procedure(?,?,?,?)";
command.Parameters.Add(param); //add all your parameters.

按如下格式设置查询:

        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();

如果您正在使用ODBC连接,当使用CommandType.StoredProcedure时,您必须为过程名称使用不同的语法。在你的例子中:

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

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