2012-01-09 3 views
1

Использование .net 2 и ADO.NET.Определение наличия транзакции TransactionScope

Есть ли способ определить, совершена ли сделка или нет? Причина в том, что я застрял в устаревшей структуре, которую я не могу изменить, и может быть или не быть обычной транзакцией. Иногда внешняя транзакция уже совершена, в результате чего следующий вызов базы данных генерирует исключение, и мне нужно знать, есть оно или нет.

Любые указатели были бы замечательными!

Благодаря

Йохан

+1

Проводка некоторых примеров текущей кодовой базы поможет. – Oded

ответ

2

Проверить Transaction.Current.TransactionInformation.Status. Если это ничего, кроме TransactionStatus.Active, вы не должны использовать текущую транзакцию.

Само собой разумеется, что вы должны проверить Transaction.Current на номер null, прежде чем принимать его статус.

2

Лучший метод, который я нашел для захвата это наиболее эффективно/правильно выглядит следующим образом:

Внутри TransactionScope используя заявление, и перед вызовом объема/Complete().

//Register for the transaction completed event for the current transaction 
Transaction.Current.TransactionCompleted += new TransactionCompletedEventHandler(Current_TransactionCompleted); 

Затем создайте функцию обработчика событий следующим образом:

/// <summary> 
/// Handles the TransactionCompleted event of the Current control. 
/// </summary> 
/// <param name="sender">The source of the event.</param> 
/// <param name="e">The <see cref="System.Transactions.TransactionEventArgs"/> instance containing the event data.</param> 
static void Current_TransactionCompleted(object sender, TransactionEventArgs e) 
{ 
    if (e.Transaction.TransactionInformation.Status == TransactionStatus.Committed) 
    { 
     /// Yay it's committed code goes here! 
    } 
} 

Цитирует MSDN

«Вы можете зарегистрироваться на это событие, вместо использования летучей вербовки для получения информации результата по сделкам. Параметр, переданный делегату TransactionCompletedEventHandler, является экземпляром транзакции. Затем вы можете запросить свойство TransactionInformation конкретного экземпляра, чтобы получить экземпляр TransactionInformation, свойство Status которого содержит статус транзакции с обязательным или отмененным значением. "

Смежные вопросы