我有一個存儲過程,返回值爲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.
這就是我所做的......讓我發佈一些代碼我做到了。 – SoftwareSavant 2012-02-15 14:20:36
只需檢查空值或更好 'object retVal = cmd.ExecuteScalar(); if(object is int) outcome =(int)ret; }' 雖然爲什麼不考慮使用NUMBER OUT參數? – alwayslearning 2012-02-15 14:31:54
你的意思是在存儲過程中?我必須與DBA交談。我不確定她是否熟悉該功能。 – SoftwareSavant 2012-02-15 14:54:32