2016-04-16 40 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块等等。