0

我有一个返回 1 或 0 的存储过程。我需要在调用它的 .net 函数中返回这个值。我知道如何从 Oracle 取回数据集(使用 refCursor),我知道如何将数据输入 Oracle,调用 cmd.ExecuteNonQuery()(假设您使用存储的过程来输入数据)。但是你如何获得一个存储过程的单一返回值呢?我没有返回数据集,而是返回 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。

4

1 回答 1

2

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

您可以通过使用“OracleCommand.ExecuteScalar()”执行存储过程来获取标量值。请记住为 OUT refcursor 创建一个 OracleParameter 并将方向设置为“ParameterDirection.Output”,并将“OracleDbType”属性设置为“OracleDbType.RefCursor”

于 2012-02-15T14:18:54.310 回答