如何通过ODBC连接在c#中传递Informix集合参数(LIST,SET,MULTISET)
技术问答
270 人阅读
|
0 人回复
|
2023-09-12
|
我正在寻找一C#中传递Informix列表参数的方法。
) y3 w& m& Q* u* l) z) ]$ b我问了一个关于如何传递多值参数的问题Informix但现在我需要从C#中执行它。
: Y$ O2 V. }/ n! W5 y; m5 x8 f% A在简历中,我有这样的程序。$ D P3 N: J! ~& m- w( Q
CREATE PROCEDURE test_3(c LIST(CHAR(10) NOT NULL)) RETURNING CHAR(10) AS r; DEFINE r CHAR(10); FOREACH SELECT * INTO r FROM TABLE(c) RETURN r WITH RESUME; END FOREACH;END PROCEDURE;像这样在Aqua Data Studio.8.0.22.它可以正常工作
" p, Y. L/ i0 M/ h) e L EXECUTE PROCEDURE test_3('LIST{''stspols'',''stsrepo};因此,我举了一个简短的例子来解释如何工作c#中执行它。2 Z& G, z9 h; Y& p1 ?
首先像 CommandType.Text. t% z/ O2 j8 E ]
string strParameters = "LIST{''stspols'',''stsrepo''}";using (OdbcConnection oConnection = new OdbcConnection("DSN=MYDSN;UID=MYUIDWD=MYPWD;")) oConnection.Open();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;using (OdbcDataAdapter oCommand = new OdbcDataAdapter(string.Format("EXECUTE PROCEDURE test_3({0}",strParameters),oConnection)) using (DataTable dt = new DataTable()) oCommand.Fill(dt); 这个作品很好。, j4 l. g8 w! x, @' a7 @8 X% g
所以我很好奇,试图执行它,但是 CommandType.StoredProcedure: O+ n% m" N" T5 ~+ k% | p1 a
string strParameters = "LIST{''stspols'',''stsrepo''}"; using (OdbcConnection oConnection = new OdbcConnection("DSN=MYDSN;UID=MYUIDWD=MYPWD;")) oConnection.Open();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;using (OdbcCommand oCommand = new OdbcCommand("{CALL test_3(?)}",oConnection)) oCommand.CommandType = CommandType.StoredProcedure; OdbcParameter oParameter = new OdbcParameter("c",OdbcType.Char,4000); oParameter.Value = strParameters; oCommand.Parameters.Add(oParameter); using (OdbcDataAdapter oDataAdapter = new OdbcDataAdapter(oCommand)) using (DataTable dt = new DataTable()) oDataAdapter.Fill(dt); 但现在我明白了 ERROR [HY000] [Informix][Informix ODBC Driver][Informix]Invalidcollection literal value.+ l/ e" Z+ ~9 p1 u9 n
所以在这一切之后,我的最后一个问题是/ j$ Y" q! H! |1 @
我如何从C#中使用Collection参数类型(LIST,SET,MULTISET)这种过程作为存储过程执行Informix过程。
# T9 M9 A2 L/ @7 k, s. r显然我做错了。/ j& ]* ~9 _9 S3 b
感谢您的宝贵帮助。
' n( _5 U6 `7 l/ ^! B% w 7 G2 S2 y, u; x2 L0 g
解决方案: |
|
|
|
|
|