通过 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 存储过程的最佳/正确方法?的主要内容,如果未能解决你的问题,请参考以下文章
C#:通过 ADO.NET 在 SQL Server 2008 上运行事务
ADO.net是啥?通过ADO. NET连接到数据库,提取数据,一般需要哪对象?