Usando para IDbConnection / IDbTransaction seguro de usar?

Embora minha suposição possa parecer subjetiva, depois de algumas pesquisas, descobri que não é incomum encontrar desenvolvedores que preferem um bonecoTry/Catch em vez de usar oUsando declaração paraIDbConnection/IDbTransaction processamento (Close / Commit / Rollback).

Isso vale para alguns dos desenvolvedores mais experientes e alguns novos. Eu não vou referenciar a pergunta no StackOverflow ou links de fórum como exemplo, então as pessoas não ficam ofendidas. Deo que eu encontrei, Usando declaração éseguro usar (sem trocadilhos)

Há algo de errado com isso? Considere o seguinte código:

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

Assumir{CREATE_CONNECTION} é o espaço reservado para umSub Isso cria uma conexão, dependendo do fornecedor do banco de dados, escrito de acordo com todas as possíveis práticas recomendadas e não precisa de mais melhorias.

Existe uma razão pela qual o código acima não pode ser reescrito como tal:

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

?

Claramente, a versão # 2 é mais intuitiva para o que está fazendo. Mas talvez eu esteja perdendo algo importante aqui? Coisas como implementações específicas de fornecedor de bibliotecas de acesso a dados, que não chamamTransaction.Commit e / ouConnection.Close emDispose internamente? Esta abordagem está sendo desativada em um futuro próximo, ou não é considerada comoclaro o suficiente no padrão de programação moderna / melhores práticas? Ferramentas de desenvolvimento de aplicativos mono / móveis sem suporte a depuração paraUsing palavra-chave?

Estou à procura de qualquer tipo de resposta para apoiar ou negar o ponto. De preferência aquele com aspas para a documentação original, algo comoDo not use Using with IDbTransaction when .... Links para blogs ou experiência pessoal também são bons.

questionAnswers(2)

yourAnswerToTheQuestion