从相同的存储过程获取RefCursor和VarChar输出

时间:2013-06-07 10:29:08

标签: c# oracle stored-procedures odp.net data-access

我是Oracle的新手,所以请保持温和......

我在.NET 4中使用C#和ODP11查询现有的Oracle数据库。到目前为止,所有程序都很难弄清楚,但是一旦我弄清楚我在做什么,大多数都“只是工作”了......这是一个不同的故事...

我有一个存储过程,它有4个参数:2个输入和2个输出...... 2个输入是宏的。其中一个输出是Varchar2,另一个是refcursor。

我正在使用OracleDataReader来运行查询,就像我有任何其他返回RefCursor的proc一样,但在这一个中,reader.Read()不断返回false而我没有数据。但是,另一个Output变量包含数据(字符串)。

我尝试过使用reader.NextResult()但是也返回false,而我的reader.Read()仍然返回false ...

我可以确认使用Toad运行proc会返回正确的结果集...

有什么想法吗?我究竟做错了什么?

感谢。

1 个答案:

答案 0 :(得分:1)

好的,经过多次挖掘后,我找到了解决方案。

原始代码使用的是ExecuteReader。我已将其更改为运行ExecuteNonQuery。

我传递了与我相同的参数和类型(2个输入,2个输出,其中一个是字符串,一个是refcursor)。

当ExecuteNonQuery运行时,我可以看到第3个参数(字符串)的值。然后我做以下事情:

OracleDataReader dr = ((OracleRefCursor)pRefcursor.Value).GetDataReader();

然后我可以和博士一起做我惯常的循环!快乐的日子!