Поделиться через


Поддержка транзакций в OLE DB

Транзакция — это способ группировки или пакетной обработки, ряд обновлений источника данных, чтобы все успешно и зафиксированы одновременно или (если один из них не выполнен), ни один из них не фиксируется, а вся транзакция откатывается. Этот процесс обеспечивает целостность результата в источнике данных.

OLE DB поддерживает транзакции со следующими тремя методами:

Связь сеансов и транзакций

Один объект источника данных может создавать один или несколько объектов сеанса, каждый из которых может находиться внутри или за пределами области транзакции в определенное время.

Если сеанс не вводит транзакцию, все действия, выполненные в этом сеансе в хранилище данных, немедленно фиксируются при каждом вызове метода. (Иногда это называется режимом автокоммитирования или неявным режимом.)

Когда сеанс входит в транзакцию, все действия, выполненные в этом сеансе в хранилище данных, являются частью этой транзакции и фиксируется или прервана как одна единица. (Иногда это называется режимом ручной фиксации.)

Поддержка транзакций зависит от поставщика. Если поставщик, который используется, поддерживает транзакции, объект сеанса, который поддерживает ITransaction и ITransactionLocal может ввести (не вложенную) транзакцию. Класс OLE DB Templates CSession поддерживает эти интерфейсы и рекомендуется реализовать поддержку транзакций в Visual C++.

Запуск и завершение транзакции

Вы вызываете StartTransactionCommitметоды и Abort методы в объекте набора строк в потребителе.

Вызов ITransactionLocal::StartTransaction запускает новую локальную транзакцию. Когда вы запускаете транзакцию, любые изменения, которые будут выполняться последующими операциями, не применяются к хранилищу данных, пока не зафиксируют транзакцию.

Вызов ITransaction::Commit или ITransaction::Abort завершение транзакции. Commit Вызывает все изменения в области транзакции, применяемой к хранилищу данных. Abort Вызывает отмену всех изменений в области транзакции, а хранилище данных остается в состоянии, которое было до начала транзакции.

Вложенные транзакции

Вложенные транзакции возникают при запуске новой локальной транзакции, когда активная транзакция уже существует в сеансе. Новая транзакция запускается как вложенная транзакция под текущей транзакцией. Если поставщик не поддерживает вложенные транзакции, вызов StartTransaction при наличии активной транзакции в сеансе возвращает XACT_E_XTIONEXISTS.

Распределенные транзакции

Распределенная транзакция — это транзакция, которая обновляет распределенные данные; то есть данные нескольких сетевых компьютерных систем. Если вы хотите поддерживать транзакции по распределенной системе, следует использовать платформа .NET Framework, а не поддержку транзакций OLE DB.

См. также

Использование методов доступа