如何通过 ODBC 连接在 C# 中传递 Informix 集合参数(LIST、SET、MULTISET)
本文关键字:参数 集合 LIST Informix MULTISET SET 连接 ODBC 何通过 | 更新日期: 2023-09-27 18:37:18
>我正在寻找一种在 C# 中传递 Informix 列表参数的方法。
我问了一个上一个问题,即如何将多值参数传递给 Informix,但现在我需要从 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);
}
}
}
这个工作正常。
所以我变得愤怒并试图执行它,但作为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 过程,并将集合参数类型(LIST、SET、MULTISET)作为存储过程。
显然我做错了什么。
提前感谢您的宝贵帮助。
双引号在原始 SQL 中是必需的,但在参数化查询中不需要。 您应该能够替换:
string strParameters = "LIST{''stspols'',''stsrepo''}";
跟:
string strParameters = "LIST{'stspols','stsrepo'}";
了解何时需要加倍以及何时不需要加倍是很棘手的,但"不在占位符值中"是准确的。