2016-04-16 41 views
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 
  1. (第二try-catch塊),這個異常將被第一個catch塊捕獲,並且不再繼續進行下去了嗎?

  2. 嵌套Try-Catch塊中是否存在這種情況,異常是否包含在它們自己的try-catch塊中?即:如果事務執行失敗,它會調用第二個catch塊(它啓動回滾),但它不會調用第一個catch塊是?同樣,如果發生事務回滾,它只會調用其相應的catch塊而不是前兩個?

+0

只要它們匹配由Catch行定義的異常類型,異常就不會冒泡。如果需要的話,您可以重新拋出catch塊內的錯誤來泡泡它。故意破壞您的連接字符串應該說明發生了什麼(以及斷點)。 – MrGadget

回答

0

當一個異常拋出時,它會被傳遞給最接近的catch塊對應try塊來處理它。如果沒有任何catch塊來處理異常,或者如果對應的catch塊引發異常,則會出現,如果有任何try/catch塊,異常會傳遞給父catch塊等等。