Bezpieczne w użyciu dla IDbConnection / IDbTransaction?

Chociaż moje przypuszczenie może wydawać się subiektywne, po kilku badaniach odkryłem, że nie jest niczym niezwykłym znalezienie programistów, którzy faworyzują manekinaTry/Catch zamiast używaćUżywanie instrukcji dlaIDbConnection/IDbTransaction przetwarzanie (Close / Commit / Rollback).

Dotyczy to nawet niektórych doświadczonych programistów i kilku nowych. Przykładowo nie zamierzam odwoływać się do żadnego z pytań na temat StackOverflow lub linków na forum, więc ludzie się nie obrażają. ZCo znalazłem, Za pomocą oświadczenie jestbezpieczny w użyciu (gra słów nie przeznaczona).

Czy jest w tym coś złego? Rozważ następujący kod:

Public Sub Commit()
  Dim cn As IDbConnection = {CREATE_CONNECTION}
  Dim tran As IDbTransaction = Nothing

  cn.Open()
  Try
    tran = cn.BeginTransaction
    'run some queries here
    tran.Commit()
  Catch ex As Exception
    If Not tran Is Nothing Then tran.Rollback()
    Throw
  Finally
    cn.Close()
  End Try
End Function

Założyć{CREATE_CONNECTION} to miejsce na aSub który tworzy połączenie, w zależności od dostawcy bazy danych, napisane zgodnie ze wszystkimi możliwymi najlepszymi praktykami i nie wymaga większej poprawy.

Czy istnieje powód, dla którego powyższego kodu nie można przepisać jako takiego:

Using cn As IDbConnection = {CREATE_CONNECTION}
  cn.Open()
  Using tran As IDbTransaction = cn.BeginTransaction
    'run some queries here
    tran.Commit()
  End Using
End Using

?

Oczywiście wersja 2 jest bardziej intuicyjna w tym, co robi. Ale może brakuje mi tutaj czegoś ważnego? Rzeczy takie jak implementacje bibliotek dostępu do danych specyficzne dla dostawcy, które nie wywołująTransaction.Commit i / lubConnection.Close naDispose wewnętrznie? Czy to podejście zostanie wycofane z użytku w najbliższej przyszłości, czy też nie będzie uważane za takiewystarczająco jasne w nowoczesnym wzorcu programowania / najlepszych praktykach? Narzędzia do obsługi aplikacji Mono / Mobile bez obsługi debugowaniaUsing słowo kluczowe?

Szukam jakiejkolwiek odpowiedzi, aby poprzeć lub zaprzeczyć. Najlepiej ten z cytatami do oryginalnej dokumentacji, coś w tym styluDo not use Using with IDbTransaction when .... Linki do blogów lub osobistych doświadczeń są również w porządku.

questionAnswers(2)

yourAnswerToTheQuestion