DBTransaction Откат бросков - PullRequest
2 голосов
/ 13 мая 2010

Изучая документацию, он говорит, что метод Rollback может выдавать, когда транзакция не находится в состоянии ожидания (после начала транзакции и до фиксации транзакции).

Я не могу найти способ проверить, может ли транзакция быть откатом или нет. Государственной собственности тоже нет.

Ответы [ 2 ]

5 голосов
/ 13 мая 2010

В идеале, просто оберните вашу транзакцию оператором «using» или используйте объект TransactionScope, который автоматически откатится, если будет сгенерировано исключение или если транзакция не будет зафиксирована до того, как она выйдет из области видимости.

В остальное время, каким бы уродливым он ни был, я обычно оборачиваю свои откаты в пустой блок try / catch, потому что почти всегда в обработчике catch есть более значимое исключение. Идея состоит в том, что мы хотим выполнить откат, только если сможем, но мы не хотим начинать генерировать новые исключения, если мы не можем (по любым непредсказуемым причинам), потому что транзакция будет откатываться до тех пор, пока она не зафиксирована тем не мение. Вам все еще нужно попытаться очистить его должным образом, чтобы не было необходимости ждать сборщика мусора, но если вы не можете этого сделать, то откат не является настоящей проблемой.

try
{
  SqlTransaction trans = connection.BeginTransaction();
  ///blah blah blah
}
catch(Exception theExceptionICareAbout)
{
  try
  {
    if(trans != null)
    {
      trans.Rollback();
    }
  }
  catch {}
  throw;  //re-throws the meaningful exception.
}

Примечание: не передавайте явное исключение повторно (например, «throw theExceptionICareAbout»), потому что это будет воссоздавать трассировку стека. Вместо этого просто используйте команду «throw», которая продолжит стек существующих исключений.

0 голосов
/ 13 мая 2010

Используете ли вы объект TransactionScope в вашем коде c #. Если это так, вам никогда не нужно выполнять откат. Если вы явно не зафиксируете транзакцию, она откатится, когда объект области транзакции выйдет из области видимости.

...