1

我是甲骨文的新手,所以请温柔...

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

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

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

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

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

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

谢谢。

4

1 回答 1

1

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

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

我传递了与我一样的参数和类型(2 个输入,2 个输出,其中一个是字符串,一个是引用光标)。

当 ExecuteNonQuery 运行时,我可以看到第三个参数(字符串)的值。然后我执行以下操作:

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

然后我可以和博士一起做我通常的循环!快乐的时光!

于 2013-06-07T14:09:13.673 回答