none
VB.NET+ODP.NETでFillメソッド呼び出し直後の例外がうまく捕捉されない RRS feed

  • 質問

  • ・開発機
    Windows7 Professional
    VB.NET2010 Professional
    ODP.NET (11.2.0.3.0)
    Oracle Developer Tools for VisualStudio

    ・DBサーバー
    Windows Server 2008 R2
    Oracle Database 11.2.0.3.0(x64)
    Oracle Client 11.2.0.3.0(x86)

    下記のようなプログラムで、デバッグ有りで開始します。
    TableAdapterのFillメソッドを呼び出す直前の
    エラー1の箇所でスローされた例外はApp_UnhandledExceptionで捕捉されますが、
    エラー1をコメントアウトしたうえでエラー2の箇所でスローされた例外は
    App_ThreadException、App_Unhandled
    のどちらにも捕捉されず、ブレークポイントを置いても何故かブレークしません。

    挙動が異常終了しているように見えましたので、
    イベントログに何か記録されているかと思いましたが何も記録されていませんでした。
    ロジック中のFillメソッド自体は正常に通過しており、エラー2をThrowする行にブレークポイントを置くと正常にブレークします。

    何か環境の構成に問題があるのか、根本的に誤ったコードの記述をしているのでしょうか?
    また、同じような現象でお悩みになった方などいらっしゃいませんでしょうか?
     
       Public Shared Sub Main(ByVal CmdArgs() As String)
    
            AddHandler Application.ThreadException, AddressOf App_ThreadException
            AddHandler Thread.GetDomain().UnhandledException, AddressOf App_Unhandled
    
            Using ta0010 As New M0010TableAdapters.M0010TableAdapter
                Using ds0010 As New M0010
    
                    Throw new Exception("エラー1") ・・・捕捉される
                    ta0010.Fill(ds0010._M0010, 12345)
                    Throw new Exception("エラー2") ・・・捕捉されない
    
                End Using
            End Using
    
        End Sub
    
        Private Shared Sub App_ThreadException(ByVal sender As Object, ByVal tex As ThreadExceptionEventArgs)
            MessageBox.Show("エラー")
        End Sub
    
        Private Shared Sub App_Unhandled(ByVal sender As Object, ByVal unex As UnhandledExceptionEventArgs)
            MessageBox.Show("エラー")
        End Sub

    2013年3月20日 14:14

回答

  • ロジック上は何をやってもダメみたいだったので、ODP.NETのパッチ適用とリビジョンダウンで状況が改善するかどうかを検証してみました。

    11.2.0.3.0→最新のパッチ適用・・・改善せず
    11.2.0.3.0→11.2.0.2.1・・・改善せず
    11.2.0.2.1→11.2.0.1.0・・・改善せず
    11.2.0.1.0→11.2.0.1.2・・・想定どおりApp_Unhandledで捕捉された
    11.2.0.1.2→11.1.0.7.0・・・未検証

    ということで、11.2.0.1.2へリビジョンダウンして環境を再構築することとしました。
    このバージョンのOracle Developer Tools for VisualStudio は不安定ですので、最新リビジョンで今後改善されることを願います。

    ちなみに、ODP.NET=11.2.0.1.2 + Oracle Developer Tools for VisualStudio=11.2.0.3.0 の混在環境では、ODTの基本操作が全てエラーとなり使用できませんでした。

    とりあえず、自己解決ですがこれにてクローズといたします。

    • 回答としてマーク PINTO0309 2013年3月22日 15:13
    2013年3月22日 15:12