C# 从存储过程中获取Oracle数据;“C”;网络应用

C# 从存储过程中获取Oracle数据;“C”;网络应用,c#,oracle,stored-procedures,C#,Oracle,Stored Procedures,我很难让我的c#代码运行存储过程并返回行,以便在数据网格上显示。我搜索了这个网站,发现其他人也有同样的问题,但我尝试了建议的修复,仍然出现了“调用中参数的数量或类型错误”的错误 这是我的存储过程代码 create or replace PROCEDURE GetData ( P_RECS OUT SYS_REFCURSOR, P_YEARLIST IN VARCHAR2 ) AS BEGIN OPEN P_RECS FOR select desc from emp_d

我很难让我的c#代码运行存储过程并返回行,以便在数据网格上显示。我搜索了这个网站,发现其他人也有同样的问题,但我尝试了建议的修复,仍然出现了“调用中参数的数量或类型错误”的错误

这是我的存储过程代码

create or replace 
PROCEDURE GetData
(
  P_RECS OUT SYS_REFCURSOR,
  P_YEARLIST IN VARCHAR2
)
AS 
BEGIN  
 OPEN P_RECS FOR 
  select desc
  from emp_data
  where trim(SYear) in (P_YEARLIST)
  order by upper(trim(SYear)) asc ;
END GetData ;
这是我的C代码

这只是这个存储过程的开始。我必须添加更多的参数。我相信这是一个简单的东西,我已经看过代码多次,但我无法纠正它。任何帮助都将不胜感激


谢谢

您是否应该将
opRefCur
方向
更改为
参数方向。输出
?也许应该将类型更改为
Cursor
,而不是
RefCursor
?检查此线程:Hi-Przemyslaw,我将refcur的方向更改为输出,这停止了错误,但仍然没有看到返回的数据。如果我在sql plus中运行此过程,它将返回我期望的行,但通过我的c#app返回的行不是。如果我使用的是游标而不是refcursor,我应该使用什么OracleDbType?谢谢你你能试试康拉德·弗里克斯在我提供链接的帖子中提出的建议吗?这:
DataTable dt=newdatatable();dt.Load((OracleDataReader)命令参数[“REF_CUR”].value)
Przemyslaw,我尝试了这个代码DataTable dt=newdatatable();dt.Load((OracleDataReader)命令参数[“P_RECS”]值);它仍然会在dt.Load行中出错。I get{“值不能为空。\r\n参数名称:dataReader”}
using (OracleCommand cmd = new OracleCommand("GetData", conn))
{
  cmd.CommandType = CommandType.StoredProcedure;

  OracleParameter opRefCur = new OracleParameter();
  opRefCur.ParameterName = "P_RECS";
  opRefCur.OracleDbType = OracleDbType.RefCursor;      
  opRefCur.Direction = ParameterDirection.ReturnValue;

  OracleParameter opYearList = new OracleParameter();
  opYearList.ParameterName = "P_YEARLIST";
  opYearList.OracleDbType = OracleDbType.Varchar2;
  opYearList.Value = '1973';
  opYearList.Direction = ParameterDirection.Input;

  cmd.Parameters.Add(opRefCur);
  cmd.Parameters.Add(opYearList);

  try
  {
    OracleDataReader dr = cmd.ExecuteReader();
  }
  catch (Exception ex)
  {

  }
}