无法使用多个输出参数从ODBC运行存储过程

时间:2010-08-30 16:50:58

标签: sql stored-procedures odbc db2

我在ODBC中将存储过程执行到DB2数据库时遇到问题,其中存储过程有多个输入和输出参数。如果我只在call语句中的输入参数中指定?如下所示,我得到“ SQL0440 - 使用指定参数找不到* N中的例行XXXXXXX 。”。我已将输出参数更改为“ ReturnValue ”或“ 输出 ”,结果相同

这是我的代码:

var paramList = new List<OdbcParameter>();

       var param1 = new OdbcParameter("FldId", "SLPMEMST_MESLRY");
       param1.OdbcType = OdbcType.Char;
       param1.Direction = ParameterDirection.Input;
       paramList.Add(param1);

       var param2 = new OdbcParameter("ExtIndex",2346);
       param2.OdbcType = OdbcType.Decimal;
       param2.Direction = ParameterDirection.Input;
       paramList.Add(param2);

       var param3 = new OdbcParameter("LogCmt", "test here");
       param3.Direction = ParameterDirection.Input;
       param3.OdbcType = OdbcType.Char;
       paramList.Add(param3);


        var prmOut1 = new OdbcParameter("PlainText", OdbcType.Char, 32624);
        prmOut1.Direction = ParameterDirection.InputOutput ;

        var prmOut2 = new OdbcParameter("MsgId", OdbcType.Char, 7);
        prmOut2.Direction = ParameterDirection.InputOutput;

        var prmOut3 = new OdbcParameter("MsgText", OdbcType.Char, 80);
        prmOut3.Direction = ParameterDirection.InputOutput;

        var prmOut4 = new OdbcParameter("Errors", OdbcType.Char, 1);
        prmOut4.Direction = ParameterDirection.InputOutput;

        paramList.Add(prmOut1);
        paramList.Add(prmOut2);
        paramList.Add(prmOut3);
        paramList.Add(prmOut4);

        var sproc = "{? =call P_GetEncFld (?, ?, ?)}";
DAL.Common_AS400.RunNonQuery_Parameterized(sproc, paramList,CommonData.ConnectionStringCrypto);


 public static void RunNonQuery_Parameterized(string SQLStatement, IEnumerable<OdbcParameter> parameters, string connectionString)
        {
            OdbcConnection oConn = new OdbcConnection(ConfigurationManager.ConnectionStrings[connectionString].ToString()) { ConnectionTimeout = 300 };
            using (var oCmd = new OdbcCommand())
                {
                    foreach (OdbcParameter param in parameters)
                    {
                        oCmd.Parameters.Add(param);
                    }

                    if (oConn.State != ConnectionState.Open) oConn.Open();
                    oCmd.CommandType = CommandType.Text;
                    oCmd.CommandText = SQLStatement;
                    oCmd.Connection = oConn;
                    oCmd.ExecuteNonQuery();
                }
        }

想法?

1 个答案:

答案 0 :(得分:0)

这是因为您的代码定义了sproc,而sproc本身没有相同数量的参数。确保在代码中发送和识别相同数量的参数。 您填充数组paramList但不适当地声明调用。每个参数都需要一个“?”。

"{? =call P_GetEncFld (?, ?, ?, ?, ?, ?, ?)}"