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