我是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会返回正确的结果集...
有什么想法吗?我究竟做错了什么?
感谢。
答案 0 :(得分:1)
好的,经过多次挖掘后,我找到了解决方案。
原始代码使用的是ExecuteReader。我已将其更改为运行ExecuteNonQuery。
我传递了与我相同的参数和类型(2个输入,2个输出,其中一个是字符串,一个是refcursor)。
当ExecuteNonQuery运行时,我可以看到第3个参数(字符串)的值。然后我做以下事情:
OracleDataReader dr = ((OracleRefCursor)pRefcursor.Value).GetDataReader();
然后我可以和博士一起做我惯常的循环!快乐的日子!