1

私はオラクルに慣れていないので、優しくしてください...

.NET 4 で C# と ODP11 を使用して、既存の Oracle DB にクエリを実行しています。この時点までのすべての手順は、最初は理解するのが大変でしたが、自分が何をしていたかを理解すると、ほとんどの場合「うまくいきました」...これは別の話です...

2 つの入力と 2 つの出力の 4 つのパラメーターを取るストアド プロシージャがあります... 2 つの入力はグランドです。出力の 1 つは Varchar2 で、もう 1 つは refcursor です。

RefCursorを返す他のprocと同様に、OracleDataReaderを使用してクエリを実行していますが、この場合、reader.Read()は常にfalseを返し、データを取得しません。ただし、もう一方の Output 変数にはデータ (文字列) が含まれています。

Reader.NextResult() を使用してみましたが、それも false を返し、reader.Read() はまだ false を返します...

Toad を使用して proc を実行すると、正しい結果セットが返されることを確認できます...

何か案は?私は何を間違っていますか?

ありがとう。

4

1 に答える 1

1

わかりましたので、さらに掘り下げた後、解決策を見つけました。

元のコードは ExecuteReader を使用していました。ExecuteNonQuery を実行するように変更しました。

私が行ったのと同じパラメーターと型を渡します (2 つの入力、2 つの出力、そのうちの 1 つは文字列、もう 1 つは refcursor)。

ExecuteNonQuery を実行すると、3 番目のパラメーター (文字列) の値が表示されます。次に、次のことを行います。

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

その後、dr を使用して通常のループを実行できます。幸せな日々!

于 2013-06-07T14:09:13.673 に答える