【发布时间】:2016-08-08 10:28:54
【问题描述】:
我想确认一下这个嵌套的 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 块)之前数据库连接失败,异常将被第一个 catch 块捕获,不再继续进行对吗?
在嵌套的 Try-Catch 块中,异常是否包含在它们自己的 try-catch 块中?即:如果事务执行失败,它会调用第二个catch 块(启动回滚),但它不会调用第一个catch 块是吗?同理,如果事务回滚,只会调用其对应的catch块,不会调用前两个?
【问题讨论】:
-
只要符合 Catch 行定义的异常类型,异常就不会冒泡。如果需要,您可以从 catch 块中重新抛出错误以使其冒泡。故意损坏连接字符串应该说明发生了什么(以及断点)。