Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
VB2019 バージョン情報
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30949#CommentId86142
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
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