2010-08-30 93 views
0

我在执行ODBC中的存储过程到DB2存储过程有多个输入和输出参数的数据库时遇到问题。如果我只在调用语句中的输入参数中指定?如下所示,我收到“SQL0440 - 未找到指定参数 * N中的例程XXXXXXX”。我已经改变了输出PARAMS为类型“返回值”或“输出”具有相同的结果。无法使用多输出参数从ODBC运行存储过程

这里是我的代码:

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(); 
       } 
     } 

想法?

回答

0

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

"{? =call P_GetEncFld (?, ?, ?, ?, ?, ?, ?)}"
相关问题