Не удается запустить сохраненный процесс из ODBC с несколькими выходными параметрами - PullRequest
0 голосов
/ 30 августа 2010

У меня проблемы с выполнением хранимой процедуры в ODBC для базы данных DB2, где хранимая процедура имеет несколько входных и выходных параметров.Если я укажу только входные параметры в операторе вызова с?как показано ниже, я получаю « SQL0440 - Подпрограмма XXXXXXX в * N не найдена с указанными параметрами .».Я изменил выходные параметры типа « ReturnValue » или « Output » с тем же результатом.

Вот мой код:

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 голосов
/ 01 сентября 2010

Это потому, что ваш код определил sproc, а сам sproc не имеет одинакового количества параметров. Убедитесь, что вы отправляете и идентифицируете одинаковое количество параметров в вашем коде. Вы заполняете свой массив paramList, но не объявляете вызов соответствующим образом. Каждому параметру требуется знак "?".

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