- PR -

最大カーソル数を超えています

1
投稿者投稿内容
IZ
会議室デビュー日: 2005/12/19
投稿数: 8
投稿日時: 2006-01-23 21:02
いつもお世話になっています。

現在ODP.NETを使用してプログラムを作成しているのですが、ループの最中でSELECT文を多数発行すると、「最大カーソル数を超えています」となってしまいます。
Oracleの設定でカーソルの限度数を変更できることは知っていますが、アプリケーションでの対応を望んでおります。

そこで質問なのですが、プログラムで明示的にカーソルをクローズすることは可能なのでしょうか?

例えば、
Dim dr As OracleDatareader
Dim cmd As OracleCommand

  cmd = New OracleCommand(selectstr,Connection)

dr = cmd.ExecuteReader

dr.Close()
dr.Dispose()
cmd.Dispose()

これでは閉じられていないみたいなのです。

どなたかよい方法を知っておられる方が居られましたらよろしくお願いいたします。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2006-01-23 21:09
どんなSELECT文ですか?Begin〜Commitは行っていますか?そのSELECT文、あるいはトリガーからストアドプロシージャを呼んでいませんか?そのストアドプロシージャの中で、暗黙カーソルを使っていたりしませんか?

[ メッセージ編集済み 編集者: 甕星 編集日時 2006-01-23 21:10 ]
IZ
会議室デビュー日: 2005/12/19
投稿数: 8
投稿日時: 2006-01-23 21:31
SELECT文はいたって普通のセレクト文です。
SELECT * FROM SYOHINMST のようなものがループ中に5個くらいです。

処理としてはVBソースで行っており、ストアドは使用しておりません

BeginTransaction

Loop
〜処理〜

End Loop

Commit

といった形です。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-01-24 14:35
Oracle と ODP.NET のバージョンはいくつですか?
最大カーソル数はいくつに設定されていますか?
もしもし
ぬし
会議室デビュー日: 2004/10/15
投稿数: 280
投稿日時: 2006-01-24 15:03
cmd.Dispose() を先に実行すべきでは、と書いてみるテスト。

# VB6 のソースを移行したときに、VB.net が追加したコメントには
# ガーベジコレクトされるまでオブジェクトを破棄できない、と
# 書かれてあったりしました。
# ガーベジコレクトさせてみたらどうなるでしょう。

_________________
もしもし@RMAN 友の会
1

スキルアップ/キャリアアップ(JOB@IT)