.net: Лучшая практика для обработки исключений при использовании транзакций? - PullRequest
1 голос
/ 12 февраля 2011

Есть ли лучшая практика для обработки исключений при использовании транзакции? Я должен сказать, что я использую Sql-сервер в качестве источника данных и VB.net 2010.

Спасибо

Ответы [ 3 ]

2 голосов
/ 12 февраля 2011

IDbTransaction будет автоматически отменен после его удаления. Таким образом, обычный шаблон выглядит примерно так (C #, я оставлю перевод в VB.NET в качестве упражнения):

using(SqlConnection connection = ...)
{
    connection.Open();
    using(SqlTransaction transaction = connection.BeginTransaction(...)
    {
        ... do database stuff

        // Last line in the using block commits the transaction
        transaction.Commit();
    } // Transaction disposed here - if Commit wasn't called, it will be rolled back
} // Connection disposed here

т.е. вам не нужно явно вызывать Rollback в случае исключения. Вы редко будете вызывать Rollback явно - это будет необходимо, только если вы обнаружите условие промежуточной транзакции (например, нарушение бизнес-правила), которое требует явного отката.

Обработка исключений обычно выполняется на более высоком уровне, т. Е. В вызывающем коде может быть блок try / catch.

1 голос
/ 12 февраля 2011

Так как «использование» не доступно в VB, вы должны запрограммировать что-то подобное ниже (извините, это на C # ... я не могу написать VB наизусть). Это функциональный эквивалент, чем оператор using.

connection.Open();
SqlTransaction transaction;
try {
    transaction = connection.BeginTransaction(...)

    ... do database stuff

    // Last line in the using block commits the transaction
    transaction.Commit();
} finally {
    if (transaction != null) transaction.Dispose();
}

Кроме того, всегда рекомендуется использовать не собственные API, а классы TransactionScope. Это важно, поскольку, возможно, вы захотите добавить другие транзакционные ресурсы.

0 голосов
/ 12 февраля 2011

о, а что касается обработки исключений.Ну, это часто теоретический вопрос.Большинство людей ловят и глотают исключение и показывают сообщения об ошибках.Другие, более теоретические люди просто очищают (используя блоки using или finally) и позволяют исключению попадать во время выполнения (системное сообщение) или перехватывать их в универсальном обработчике исключений во время выполнения.

...