Обработка транзакций
Транзакция разделяет начало и конец ряда операций доступа к данным, выполняемых через соединение. В зависимости от транзакционных возможностей источника данных объект Connection также позволяет создавать транзакции и управлять ими. Например, с помощью поставщика Microsoft OLE DB для SQL Server для доступа к базе данных в Microsoft SQL Server можно создать несколько вложенных транзакций для выполняемых команд.
ADO гарантирует, что изменения в источнике данных в результате операций в транзакции успешно происходят вместе или вообще не происходят.
Если вы отмените транзакцию или если одна из ее операций завершается сбоем, результат будет таким, как если бы ни одна из операций в транзакции не произошла. Источник данных останется таким же, как и до начала транзакции.
ADO предоставляет следующие методы управления транзакциями: BeginTrans, CommitTrans и RollbackTrans. Используйте эти методы с объектом Connection , если требуется сохранить или отменить ряд изменений, внесенных в исходные данные в виде единого блока. Например, чтобы перевести деньги между счетами, вычесть сумму из одного счета и добавить ту же сумму к другому. Если любое из обновлений завершается сбоем, счета перестают балансировать. Внесение этих изменений в открытой транзакции гарантирует, что все изменения или ни один из них не будут внесены.
Примечание
Не все поставщики поддерживают транзакции. Убедитесь, что определяемое поставщиком свойство Transaction DDL отображается в коллекции Свойств объекта Connection, указывая, что поставщик поддерживает транзакции. Если поставщик не поддерживает транзакции, вызов одного из этих методов приведет к ошибке.
После вызова метода BeginTrans поставщик больше не будет мгновенно фиксировать внесенные изменения, пока вы не вызовете CommitTrans или RollbackTrans для завершения транзакции.
Вызов метода CommitTrans сохраняет изменения, внесенные в открытой транзакции в соединении, и завершает транзакцию. Вызов метода RollbackTrans отменяет все изменения, внесенные в открытой транзакции, и завершает транзакцию. Вызов любого из методов при отсутствии открытой транзакции приводит к ошибке.
В зависимости от свойства Attributes объекта Connection вызов метода CommitTrans или RollbackTrans может автоматически запустить новую транзакцию. Если для свойства Attributes задано значение adXactCommitRetaining, поставщик автоматически запускает новую транзакцию после вызова CommitTrans . Если для свойства Attributes задано значение adXactAbortRetaining, поставщик автоматически запускает новую транзакцию после вызова RollbackTrans .
Уровень изоляции транзакции
Используйте свойство IsolationLevel , чтобы задать уровень изоляции транзакции в объекте Connection . Параметр не вступает в силу до следующего вызова метода BeginTrans . Если запрашиваемый уровень изоляции недоступен, поставщик может вернуть следующий более широкий уровень изоляции. Дополнительные сведения о допустимых значениях см. в разделе Справочник по программированию ADO.
Вложенные транзакции
Для поставщиков, поддерживающих вложенные транзакции, вызов метода BeginTrans в открытой транзакции запускает новую вложенную транзакцию. Возвращаемое значение указывает уровень вложенности: возвращаемое значение "1" означает, что вы открыли транзакцию верхнего уровня (то есть транзакция не вложена в другую транзакцию), "2" означает, что вы открыли транзакцию второго уровня (транзакцию, вложенную в транзакцию верхнего уровня) и т. д. Вызов CommitTrans или RollbackTrans влияет только на последнюю открытую транзакцию; Перед разрешением любых транзакций более высокого уровня необходимо закрыть или откатить текущую транзакцию.