Обработка транзакций
Область применения: Access 2013, Office 2013
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 . Если уровень изоляции, который вы запрашиваете, недоступен, поставщик может вернуть следующий больший уровень изоляции. Дополнительные сведения о допустимых значениях см. в свойстве IsolationLevel в справочнике программиста ADO.
Вложенные транзакции
Для поставщиков, поддерживающих вложенные транзакции, вызов метода BeginTrans в открытой транзакции запускает новую вложенную транзакцию. Возвращаемое значение указывает уровень вложенности: возвращаемое значение "1" означает, что вы открыли транзакцию верхнего уровня (то есть транзакция не вложена в другую транзакцию), "2" означает, что вы открыли транзакцию второго уровня (транзакцию, вложенную в транзакцию верхнего уровня) и т. д. Вызов CommitTrans или RollbackTrans влияет только на последнюю открытую транзакцию; Перед разрешением транзакций более высокого уровня необходимо закрыть или откатить текущую транзакцию.