Поддержка транзакций в OLE DB
Транзакция — это способ группировки или пакетной обработки, ряд обновлений источника данных, чтобы все успешно и зафиксированы одновременно или (если один из них не выполнен), ни один из них не фиксируется, а вся транзакция откатывается. Этот процесс обеспечивает целостность результата в источнике данных.
OLE DB поддерживает транзакции со следующими тремя методами:
Связь сеансов и транзакций
Один объект источника данных может создавать один или несколько объектов сеанса, каждый из которых может находиться внутри или за пределами области транзакции в определенное время.
Если сеанс не вводит транзакцию, все действия, выполненные в этом сеансе в хранилище данных, немедленно фиксируются при каждом вызове метода. (Иногда это называется режимом автокоммитирования или неявным режимом.)
Когда сеанс входит в транзакцию, все действия, выполненные в этом сеансе в хранилище данных, являются частью этой транзакции и фиксируется или прервана как одна единица. (Иногда это называется режимом ручной фиксации.)
Поддержка транзакций зависит от поставщика. Если поставщик, который используется, поддерживает транзакции, объект сеанса, который поддерживает ITransaction
и ITransactionLocal
может ввести (не вложенную) транзакцию. Класс OLE DB Templates CSession поддерживает эти интерфейсы и рекомендуется реализовать поддержку транзакций в Visual C++.
Запуск и завершение транзакции
Вы вызываете StartTransaction
Commit
методы и Abort
методы в объекте набора строк в потребителе.
Вызов ITransactionLocal::StartTransaction
запускает новую локальную транзакцию. Когда вы запускаете транзакцию, любые изменения, которые будут выполняться последующими операциями, не применяются к хранилищу данных, пока не зафиксируют транзакцию.
Вызов ITransaction::Commit
или ITransaction::Abort
завершение транзакции. Commit
Вызывает все изменения в области транзакции, применяемой к хранилищу данных. Abort
Вызывает отмену всех изменений в области транзакции, а хранилище данных остается в состоянии, которое было до начала транзакции.
Вложенные транзакции
Вложенные транзакции возникают при запуске новой локальной транзакции, когда активная транзакция уже существует в сеансе. Новая транзакция запускается как вложенная транзакция под текущей транзакцией. Если поставщик не поддерживает вложенные транзакции, вызов StartTransaction
при наличии активной транзакции в сеансе возвращает XACT_E_XTIONEXISTS.
Распределенные транзакции
Распределенная транзакция — это транзакция, которая обновляет распределенные данные; то есть данные нескольких сетевых компьютерных систем. Если вы хотите поддерживать транзакции по распределенной системе, следует использовать платформа .NET Framework, а не поддержку транзакций OLE DB.