2010-08-30 27 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 (?, ?, ?, ?, ?, ?, ?)}"
相關問題