Руководство по работе с БД Firebird с использованием библиотеки ADO .Net 2.0

Поставка электротехнического оборудования также читайте. | Смотрите http://жгутов.рф управление сексуальной энергией. | бильярдный стол магнат | база отдыха нсо |

TransactionScope и распределенные транзакции в Net 2.0


В Net Framework 2 появилось новое пространство имен System.Transaction, которое предоставляет поддержку распределенных транзакций. IBProvider поддерживает распределенные транзакции за счет расширения COM+ Microsoft Transaction Server (MTS). Распределенные транзакции позволяют нам преодолеть границы базы данных и, к примеру, выполнять действия с различными БД в контексте одной распределенной транзакции.

Для организации распределенных транзакций служит объект TransactionsScope. В случае, если он обнаружит, что в его контексте используется несколько подключений, он будет использовать распределенную транзакцию, иначе локальную. Следующий пример иллюстрирует поведение объекта TransactionsScope:

public void TransactionScopeTest() { //TransactionScrope автоматически свяжет локальные транзакции с распределенной

//В данном контексте будет две локальных транзакции на каждое подключение и одна

//распределенная.

using (TransactionScope scope = new TransactionScope()) { //автоматически будет создана локальная транзакция

OleDbConnection con1 = ConnectionProvider.CreateConnection(); con1.Open();

//insert command

OleDbCommand cmd_insert = new OleDbCommand( "insert into country (country,currency) values (:country,:currency)",con1); cmd_insert.Parameters.AddWithValue("country", "Russia"); cmd_insert.Parameters.AddWithValue("currency", "Rouble"); Assert.AreEqual(1, cmd_insert.ExecuteNonQuery());

//автоматически будет создана ещё одна локальная транзакция OleDbConnection con2 = ConnectionProvider.CreateConnection(); con2.Open();

cmd_insert.Connection = con2; cmd_insert.Parameters["country"].Value = "Latvia"; cmd_insert.Parameters["currency"].Value = "Lat"; Assert.AreEqual(1, cmd_insert.ExecuteNonQuery());

//Фиксация распределенной транзакции //Для всех локальных транзакций будет вызван метод Commit()

scope.Complete();

//Если ранее распределенная транзакция не была завершена для всех локальных //транзакций будет вызван метод Rollback при вызове IDispose.Dispose()




Начало  Назад  Вперед



Книжный магазин