从.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'

+0

这就是我所做的......让我发布一些代码我做到了。 – SoftwareSavant 2012-02-15 14:20:36

+0

只需检查空值或更好 'object retVal = cmd.ExecuteScalar(); if(object is int) outcome =(int)ret; }' 虽然为什么不考虑使用NUMBER OUT参数? – alwayslearning 2012-02-15 14:31:54

+0

你的意思是在存储过程中?我必须与DBA交谈。我不确定她是否熟悉该功能。 – SoftwareSavant 2012-02-15 14:54:32