我有一个存储过程,返回的是1或0.我需要在调用它的.net函数中返回此值。我知道如何从Oracle获取数据集(使用refCursor),我知道如何将数据输入Oracle,调用cmd.ExecuteNonQuery()(假设您使用存储过程来输入数据)。但是如何获得存储的proc单一返回值?我没有返回数据集,只返回1或0.所以这有点不同。
感谢。
更新:代码更具体地显示我出错的地方?
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。
答案 0 :(得分:2)
您是否使用与OPEN curInt FOR select 42 from dual
类似的内容通过OUT REFCURSOR返回标量值?
只需使用'OracleCommand.ExecuteScalar()'执行存储过程即可获得标量值。记得为OUT refcursor创建一个OracleParameter,set是'ParameterDirection.Output'的方向,'OracleDbType'属性是'OracleDbType.RefCursor'