我是Oracle的新手,所以请温柔…
我正在使用c#和。net 4中的ODP11查询现有的Oracle DB。到目前为止,所有的程序都是,嗯,一开始弄清楚是很痛苦的,但一旦我明白我在做什么,大部分都"奏效了"……这是一个不同的故事…
我有一个存储过程,它有4个参数:2个输入和2个输出…这两个输入是大的。其中一个输出是Varchar2,另一个是refcursor。
我使用OracleDataReader来运行查询,就像我使用任何其他返回RefCursor的过程一样,但在这个过程中,reader.Read()不断返回false,我没有得到数据。但是,另一个Output变量包含数据(字符串)。
我已经尝试使用reader.NextResult(),但它也返回false,我的reader.Read()仍然返回false…
我可以确认使用Toad运行过程返回正确的结果集…
任何想法?我做错了什么?
谢谢。
好的,所以经过更多的挖掘,我找到了解决方案。
原始代码正在使用ExecuteReader。我已将其更改为运行ExecuteNonQuery。
我传递了与之前相同的参数和类型(2个输入,2个输出,其中一个是字符串,一个是refcursor)。
当ExecuteNonQuery运行时,我可以看到第三个参数(字符串)的值。然后我做以下操作:
OracleDataReader dr = ((OracleRefCursor)pRefcursor.Value).GetDataReader();
然后我可以用dr做我通常的循环!快乐的日子!