Транзакция (ODBC)

Этот раздел относится к классам ODBC библиотеки MFC.

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

Примечание.

Не все драйверы базы данных ODBC поддерживают транзакции. CanTransact Вызовите функцию-член объекта CDatabase или CRecordset, чтобы определить, поддерживает ли драйвер транзакции для данной базы данных. Обратите внимание, что CanTransact не указывает, предоставляет ли источник данных полную поддержку транзакций. Необходимо также вызвать CDatabase::GetCursorCommitBehavior и после CommitTrans и CDatabase::GetCursorRollbackBehaviorRollback проверка влияние транзакции на открытый CRecordset объект.

AddNew Вызовы функций и Edit членов CRecordset объекта влияют на источник данных немедленно при вызовеUpdate. Delete вызовы также вступают в силу немедленно. В отличие от этого, можно использовать транзакцию, состоящую из нескольких вызовов AddNew, EditUpdateи Delete, которые выполняются, но не фиксируются до явного вызоваCommitTrans. Установив транзакцию, можно выполнить ряд таких вызовов, сохраняя возможность отката. Если критически важный ресурс недоступен или какое-либо другое условие предотвращает завершение всей транзакции, можно откатить транзакцию вместо фиксации. В этом случае ни один из изменений, принадлежащих транзакции, не влияет на источник данных.

Примечание.

В настоящее время класс CRecordset не поддерживает обновления источника данных, если вы реализовали массовое получение строк. Это означает, что вы не можете выполнять вызовы к AddNew, или DeleteEditUpdate. Однако вы можете написать собственные функции для выполнения обновлений, а затем вызвать эти функции в рамках данной транзакции. Дополнительные сведения о выборке массовых строк см. в разделе Recordseting Records: Получение записей в пакетной службе (ODBC).

Примечание.

Помимо влияния на набор записей, транзакции влияют на инструкции SQL, выполняемые непосредственно при использовании ODBC HDBC, связанного с CDatabase объектом или ODBC HSTMT на основе этого HDBC.

Транзакции особенно полезны при наличии нескольких записей, которые должны обновляться одновременно. В этом случае необходимо избежать полузавершенной транзакции, например, если исключение было вызвано до последнего обновления. Группирование таких обновлений в транзакцию позволяет восстановить (откат) от изменений и вернуть записи в состояние предварительной передачи. Например, если банковские деньги передаются с учетной записи А на счет B, то как вывод из А, так и депозит в B, должен завершиться успешной обработкой средств или вся транзакция должна завершиться ошибкой.

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

Примечание.

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

Дополнительные сведения о выполнении транзакций см. в следующих разделах.

См. также

Интерфейс ODBC