0
私はちょうどこのネストされたtry-catchブロックのロジックを確認したいと思います:入れ子になってみキャッチロジック
Try
Using dbConn As New SqlConnection With {.ConnectionString = strConnStr}
dbConn.Open()
'Prepare transaction
Try
' Execute transaction
Catch ex As Exception
Try
' Transaction rollback
Catch ex2 As SqlException
' ...
End Try
Finally
dbConn.Dispose()
End Try
End Using
Catch ex As Exception
' ...
End Try
トランザクションが(第二try-catchブロックが実行される前に、データベース接続が失敗した場合)、例外は最初のキャッチブロックでキャッチされ、今後はさらに処理が進まなくなります。
ネストされたTry-Catchブロックのケースでは、例外は独自のtry-catchブロック内に含まれていますか?つまり、トランザクションの実行が失敗した場合、ロールバックを開始する2番目のcatchブロックが呼び出されますが、最初のcatchブロックは呼び出されません。同様に、トランザクションのロールバックが発生すると、最初の2つではなく、対応するcatchブロックが呼び出されます。
例外は、キャッチラインで定義された例外タイプと一致する限り、バブルアップしません。 catchブロック内からエラーを取り消して、バブル処理することができます。意図的に接続文字列を誤ってしまうと、何が起こるのかが明らかになります(ブレークポイントとともに)。 – MrGadget