#c# #transactions
#c# #транзакции
Вопрос:
Я использую System.Transanction
и TransanctionCompleted
событие для обнаружения прерванных транзакций.
Как мне узнать, почему произошел сбой? Есть ли способ обнаружить детали ошибки?
Ответ №1:
Вы можете перехватить систему.Транзакции.Исключение TransactionException для вашего метода транзакции
try
{
//Create the transaction scope
using (TransactionScope scope = new TransactionScope())
{
//Register for the transaction completed event for the current transaction
Transaction.Current.TransactionCompleted = new TransactionCompletedEventHandler(Current_TransactionCompleted);
// proces the transaction
}
}
catch (System.Transactions.TransactionAbortedException ex)
{
Console.WriteLine(ex);
}
catch (System.Transactions.TransactionException ex)
{
Console.WriteLine(ex);
}
catch
{
Console.WriteLine("Cannot complete transaction");
throw;
}
Обработчик событий завершения транзакции
static void Current_TransactionCompleted(object sender, TransactionEventArgs e)
{
Console.WriteLine("A transaction has completed:");
Console.WriteLine("ID: {0}", e.Transaction.TransactionInformation.LocalIdentifier);
Console.WriteLine("Distributed ID: {0}", e.Transaction.TransactionInformation.DistributedIdentifier);
Console.WriteLine("Status: {0}", e.Transaction.TransactionInformation.Status);
Console.WriteLine("IsolationLevel: {0}", e.Transaction.IsolationLevel);
}
Комментарии:
1. Спасибо, я имел в виду получить сведения об ошибке внутри события завершения транзакции, поскольку у меня есть доступ только к транзакции, но не мой код определяет, следует ли совершать / прерывать транзакцию или нет. Еще раз спасибо.
2. вы должны сделать это при вызове метода TransactionScope.