2012-11-06 40 views
1
procedure select_card_transaction(trans_id nvarchar2, 
            usr_id number, 
            Quantity out number) is 
    begin 
    select count(*) 
     into Quantity 
     from user_cards u 
    where u.transaction_id = trans_id 
     and u.user_id = usr_id; 
    end; 

和消費它:ORA-06550錯誤的數量或類型的參數當調用Oracle存儲過程

using(var conn = new OracleConnection(Settings.Default.OraWUConnString)) 
      { 
       var cmd = conn.CreateCommand(); 
       cmd.CommandText = "for_temporary_testing.select_card_transaction"; 
       cmd.CommandType = CommandType.StoredProcedure; 



       cmd.Parameters.AddWithValue("trans_id", TransactionID); 
       cmd.Parameters.AddWithValue("usr_id", UserID); 

       var q = new OracleParameter("Quantity", OracleType.Number); 
       q.Direction = ParameterDirection.Output; 
       cmd.Parameters.Add(q); 
       //cmd.Parameters[0].OracleType = OracleType.NVarChar; 
       //cmd.Parameters[1].OracleType = OracleType.Number; 

       conn.Open(); 
       var obj = cmd.ExecuteNonQuery(); 

       conn.Close(); 
       return (int)q.Value == 1; 
      } 

它返回以下錯誤。 ORA-06550調用Oracle存儲過程時錯誤的參數數量或類型... 任何想法?

+1

你不加參數'q'到命令 –

+0

編輯。我添加了,但仍然是相同的問題 – levi

+0

所以....是你發佈的實際代碼,你正在執行的代碼? –

回答

2

我以前有過同樣的問題。您是否使用ODP.Net驅動程序?我能夠通過首先添加輸出參數來解決問題。這需要在輸入參數之前完成。在你的情況下,它看起來像

using(var conn = new OracleConnection(Settings.Default.OraWUConnString)) 
      { 
       conn.Open(); 

       var cmd = conn.CreateCommand(); 
       cmd.CommandText = "for_temporary_testing.select_card_transaction"; 
       cmd.CommandType = CommandType.StoredProcedure; 

       // Return value parameter has to be added first ! 
       var Quantity = new OracleParameter(); 
       Quantity.Direction = ParameterDirection.ReturnValue; 
       Quantity.OracleDbType = OracleDbType.Int32; 
       cmd.Parameters.Add(Quantity); 

       //now add input parameters 
       var TransID = cmd.Parameters.Add("trans_id", TransactionID); 
       TransID.Direction = ParameterDirection.Input; 
       TransID.OracleDbType = OracleDbType.NVarchar2; 

       var UsrID = cmd.Parameters.Add("usr_id", UserID); 
       UsrID.Direction = ParameterDirection.Input; 
       UsrID.OracleDbType = OracleDbType.Int32; 

       cmd.ExecuteNonQuery(); 

       conn.Close(); 
       return Convert.ToInt32(Quantity.Value); 
      } 
2

問題出在參數。它是空的,oracle返回錯誤。我得到了,如果參數爲,它應作爲發送的DBNull

相關問題