从.net中的Oracle Stored proc获取标量值

时间:2012-02-15 13:47:34

标签: oracle stored-procedures ado.net odp.net scalar

我有一个存储过程,返回的是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。

1 个答案:

答案 0 :(得分:2)

您是否使用与OPEN curInt FOR select 42 from dual类似的内容通过OUT REFCURSOR返回标量值?

只需使用'OracleCommand.ExecuteScalar()'执行存储过程即可获得标量值。记得为OUT refcursor创建一个OracleParameter,set是'ParameterDirection.Output'的方向,'OracleDbType'属性是'OracleDbType.RefCursor'