Если вы зачислены в TransactionScope
или CommittableTransaction
, я настоятельно рекомендую вам НЕ явно создавать свои собственные локальные транзакции, используя begin transaction
или SqlConnection.BeginTransaction
.
TransactionScope
/ CommittableTransaction
являются другой «семьей» и являются взаимоисключающими от begin transaction
/ SqlTransaction
Поэтому я бы не согласился с Саиф Ханом. Это правда, что System.Transactions имеют проблемы с производительностью в Sql 2000, поэтому может быть лучше использовать SqlTransaction или begin transaction
. Однако, если вы сделаете это, вы НЕ должны также использовать TransactionScope / CommittableTransaction.
Кстати, поведение, описанное Марком Гравеллом, было изменено в .Net 4.0. Даже если вы не используете Explicit Unbind, больше невозможно откатить некоторые команды, а некоторые зафиксировать. (Однако он прав, что в старых версиях вы должны использовать Explicit Unbind).