У меня проблемы с выполнением хранимой процедуры в 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();
}
}
Идеи?