2012-02-15 57 views
0

我有一個存儲過程,返回值爲1或0.我需要將此值返回到調用它的.net函數中。我知道如何從Oracle獲取數據集(使用refCursor),我知道如何向Oracle輸入數據,調用cmd.ExecuteNonQuery()(假設您正在使用存儲過程輸入數據)。但是,如何獲得存儲的proc單一返回值?我沒有返回一個數據集,而是一個1或一個0.所以這有點不同。從.net存儲過程獲取標量值.net

謝謝。

更新:代碼更具體地顯示我要去哪裏錯了?

try 
{ 
     using (OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["ACODBConnectionString3"].ConnectionString)) 
     { 
       using (OracleCommand cmd = new OracleCommand(sProc,conn)) 
       { 
        conn.Open(); 
        cmd.CommandType = CommandType.StoredProcedure; 
        OracleParameter inputParm = new OracleParameter("HospitalFinIn", OracleDbType.Varchar2); 
        inputParm.Value = HosFin; 
        //inputParm3.Value = Double.Parse(isActive); 
        OracleParameter outRefParam = new OracleParameter("cur_out", OracleDbType.RefCursor, DBNull.Value, ParameterDirection.Output); 
        //outRefParam. 
        cmd.Parameters.Add(inputParm); 
        cmd.Parameters.Add(outRefParam); 
        outcome = (int)cmd.ExecuteScalar(); 
        if (outcome == 1) 
         FinUniq = false; 
        else if (outcome == 0) 
         FinUniq = true; 
        else 
         FinUniq = true; 
        //outcome = cmd.ExecuteNonQuery(); 
        //adapter = new OracleDataAdapter(cmd); 
        //adapter.Fill(ds); 
       } 
      } 
     } 

這是例外,我得到當我運行此

Specified cast is not valid. 

不知道我做錯了。 存儲過程肯定會返回0或1.

回答

2

您是否使用類似於OPEN curInt FOR select 42 from dual的方式通過OUT REFCURSOR返回標量值?

您可以通過使用'OracleCommand.ExecuteScalar()'執行存儲過程來獲得標量值。記得爲OUT refcursor創建一個OracleParameter,並設置方向爲'ParameterDirection.Output','OracleDbType'屬性爲'OracleDbType.RefCursor'

+0

這就是我所做的......讓我發佈一些代碼我做到了。 – SoftwareSavant 2012-02-15 14:20:36

+0

只需檢查空值或更好 'object retVal = cmd.ExecuteScalar(); if(object is int) outcome =(int)ret; }' 雖然爲什麼不考慮使用NUMBER OUT參數? – alwayslearning 2012-02-15 14:31:54

+0

你的意思是在存儲過程中?我必須與DBA交談。我不確定她是否熟悉該功能。 – SoftwareSavant 2012-02-15 14:54:32