2016-04-16 3 views
0

Я просто хотел, чтобы подтвердить логику этого вложенного блока примерки загвоздка:Уплотненный Try Поймайте Logic

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 yes? Аналогично, если происходит откат транзакции, он будет вызывать только соответствующий блок catch, а не первые два?

+0

Исключения не будут пузыриться до тех пор, пока они соответствуют типу исключений, определенному линией (линиями) Catch. Вы можете перебросить ошибку из блока catch, чтобы пузырить ее, если это необходимо. Умышленное нарушение вашей строки подключения должно осветить то, что происходит (наряду с точками останова). – MrGadget

ответ

0

, когда исключение выбрасывается, оно будет передано ближайшему блоку catch. Соответствует блоку try для его обработки. если нет какого-либо блока catch для обработки исключения или если соответствующий блок catch блокирует исключение, он выходит, если есть какой-либо блок try/catch, исключение переходит к родительскому блоку catch и так далее.

Смежные вопросы