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;
AquaDataStudio.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);
}
}
}
これはFINEで動作します。
だから私は好奇心をそそられてそれを実行しようとしましたが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.
だから、このすべての後、私の最後の質問は
ストアドプロシージャとしてコレクションパラメータタイプ(LIST、SET、MULTISET)を使用して、C#からこの種のInformixプロシージャを実行する方法。
どうやら私は何か間違ったことをしているようです。
貴重なご協力をよろしくお願いいたします。