从.net存储过程获取标量值.net
问题描述:
我有一个存储过程,返回值为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.
答
您是否使用类似于OPEN curInt FOR select 42 from dual
的方式通过OUT REFCURSOR返回标量值?
您可以通过使用'OracleCommand.ExecuteScalar()'执行存储过程来获得标量值。记得为OUT refcursor创建一个OracleParameter,并设置方向为'ParameterDirection.Output','OracleDbType'属性为'OracleDbType.RefCursor'
这就是我所做的......让我发布一些代码我做到了。 – 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