我正在寻找一种方式来传递一个Informix表参数在C#。
我问如何通过多值参数到Informix一个previus的问题,但现在我需要从C#执行它。
相关的问题是在这里 。
在简历我有这样一个过程。
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执行它像这样
EXECUTE PROCEDURE test_3('LIST{''stspols'',''stsrepo''}');
所以我做了如何在C#中执行它的一个简单的例子。
首先像CommandType.Text
string strParameters = "LIST{''stspols'',''stsrepo''}";
using (OdbcConnection oConnection = new OdbcConnection("DSN=MYDSN;UID=MYUID;PWD=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);
}
}
}
这一个工作正常。
所以我就courious并试图执行它但CommandType.StoredProcedure
string strParameters = "LIST{''stspols'',''stsrepo''}";
using (OdbcConnection oConnection = new OdbcConnection("DSN=MYDSN;UID=MYUID;PWD=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]Invalid collection literal value.
因此,经过这一切,我的最后一个问题是
我怎么能执行这种从C#Informix的程序,用一个Collection参数类型(LIST,SET,MULTISET)作为存储过程。
显然,我做错了什么。
在此先感谢您的宝贵帮助。