投稿者 魔界の仮面弁士  (社会人) 投稿日時 2024/2/28 20:07:55
> おそらくSQL文の間違いではなかったかと想像します。

うーん。SQL の記述ミスであれば、
>> MsgBox(ex.Message) では、「クローズ済オブジェクトの処理が無効です」と表示されました。
にはならない気がするのですけれどね。

OracleConnection や OracleDataReader がローカル変数ではなく、フィールド変数になっていたとか、
掲示板投稿時には書かれていない、何か別の処理があったんじゃないかと予想しますが。

もしも SQL 側が間違っているなら ExecuteReader の時点で ORA-xxx 系のエラーメッセージが出そうですし、
dr.Item のフィールド名やフィールド番号の指定ミスなら、また別のエラーになっていたと思うのですよ。


それと、ex.Message というのは、障害発生時の調査情報としては、必ずしも十分ではありません。
利用者向けの簡易表示ならばいざ知らず、開発者が障害個所を特定するために記録するためには、
ex.ToString() などを使った方が、より多くの情報を得られます。もし、StackTrace が冗長なのだとしても、
せめて ex.Message と共に ex.GetType().FullName を記録するようにしてみましょう。
先の回答でも、解析に『例外クラスの型名』と『例外メッセージの内容』が欲しいと書いていますよね。


で…それよりも問題なのは、Oracle に接続した後、そのカーソルやコネクションの後始末が行われていない点です。
掲示板に投稿する際に省略されただけならば良いのですが、使用後にはきちんと Close / Dispose を行いましょう。
Finally を使うかどうかはお好みで。
https://vbnetdb.net/odpnet/odpnet_dr_notclose.php