【问题标题】:Nested Try Catch Logic嵌套 Try Catch 逻辑
【发布时间】: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
  1. 如果在事务执行(第二个 Try-Catch 块)之前数据库连接失败,异常将被第一个 catch 块捕获,不再继续进行对吗?

  2. 在嵌套的 Try-Catch 块中,异常是否包含在它们自己的 try-catch 块中?即:如果事务执行失败,它会调用第二个catch 块(启动回滚),但它不会调用第一个catch 块是吗?同理,如果事务回滚,只会调用其对应的catch块,不会调用前两个?

【问题讨论】:

  • 只要符合 Catch 行定义的异常类型,异常就不会冒泡。如果需要,您可以从 catch 块中重新抛出错误以使其冒泡。故意损坏连接字符串应该说明发生了什么(以及断点)。

标签: vb.net try-catch


【解决方案1】:

当异常抛出时,会传递给最近的catch块对应的try块进行处理。如果没有任何catch块来处理异常,或者如果对应的catch块抛出异常,它就会出来,如果有任何try/catch块,异常就会传递给父catch块等等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 2019-11-12
    • 1970-01-01
    • 2017-04-22
    相关资源
    最近更新 更多