首先,对不起问题的长度......
所以基本上我遇到了从Informix数据库调用存储过程的问题,其中存储的proc有多个返回值,而在.NET中使用ODBC(又名ODBCCommand),我在互联网上没有看到任何东西有人在此之前做过这样的事情......所以它甚至可能吗?
因此,首先使用ODBCCommand(或一般的ODBC)来调用SP,你应该使用ODBC Call Syntax。
粗略存储过程:
create procedure informix.proc_ins (
n_company char(10),
n_message_body lvarchar(4096),
n_time int,
n_time_dt datetime year to second,
n_processed smallint)
returning
int,
int;
begin
define row_count int;
define new_serial int;
INSERT into my_table ( company, message_body, time, time_dt, processed, create_user, create_dt, recmod_user, recmod_dt)
VALUES ( n_company, n_message_body, n_time, n_time_dt, n_processed, USER, CURRENT YEAR TO SECOND, USER, CURRENT YEAR TO SECOND);
let new_serial = DBINFO('sqlca.sqlerrd1');
let row_count = DBINFO('sqlca.sqlerrd2');
return
new_serial,
row_count;
end
end procedure;
因此,给定此SP,ODBC调用语法将类似于:
{XXXX = call informix.proc_ins(?,?,?,?,?)}
其中'XXXX'不知何故有2'?'s?
对此的任何帮助都将非常感激。
在有人说“使用IBM.Data.Informix驱动程序”(其中任何一个)之前,在这种情况下是不可能的,因为“旧的”不适用于VS2010,而新的不能用于VS2010同时安装在与旧PC相同的PC上,但这是另一天完全不同的咆哮。
答案 0 :(得分:0)
我在ESQL / C中这样做的方法是将EXECUTE PROCEDURE informix.proc_ins(...)
语句看作是一个SELECT语句 - 也就是说,声明一个游标(可能在准备语句之后),然后使用OPEN (传递参数的机会)和FETCH和CLOSE来获取数据。
我希望在ODBC中使用相同的技术 - 可能绕过通用的ODBC调用语法。
如果您需要使用官方ODBC表示法/方法的正式答案,则必须让其他人提供答案。
答案 1 :(得分:0)
我不相信有一个“官方”的ODBC答案。它归功于司机。没有什么能阻止你使用SQL_PARAM_RETURN作为多个参数的类型,但是关于如何调用它,ODBC并没有说。