Транзакция (ODBC)
Этот раздел относится к классам ODBC библиотеки MFC.
Транзакция — это способ группировки или пакетной передачи ряда обновлений в источник данных, чтобы все зафиксированы одновременно или не были зафиксированы при откате транзакции. Если транзакция не используется, изменения источника данных фиксируются автоматически, а не фиксируются по запросу.
Примечание.
Не все драйверы базы данных ODBC поддерживают транзакции. CanTransact
Вызовите функцию-член объекта CDatabase или CRecordset, чтобы определить, поддерживает ли драйвер транзакции для данной базы данных. Обратите внимание, что CanTransact
не указывает, предоставляет ли источник данных полную поддержку транзакций. Кроме того, необходимо вызвать CDatabase::GetCursorCommitBehavior
и после CommitTrans
и CDatabase::GetCursorRollbackBehavior
Rollback
проверить влияние транзакции на открытый CRecordset
объект.
AddNew
Вызовы функций и Edit
членов CRecordset
объекта влияют на источник данных немедленно при вызовеUpdate
. Delete
вызовы также вступают в силу немедленно. В отличие от этого, можно использовать транзакцию, состоящую из нескольких вызовов AddNew
, Edit
Update
и Delete
, которые выполняются, но не фиксируются до явного вызоваCommitTrans
. Установив транзакцию, можно выполнить ряд таких вызовов, сохраняя возможность отката. Если критически важный ресурс недоступен или какое-либо другое условие предотвращает завершение всей транзакции, можно откатить транзакцию вместо фиксации. В этом случае ни один из изменений, принадлежащих транзакции, не влияет на источник данных.
Примечание.
В настоящее время класс CRecordset
не поддерживает обновления источника данных, если вы реализовали массовое получение строк. Это означает, что вы не можете выполнять вызовы к AddNew
, или Delete
Edit
Update
. Однако вы можете написать собственные функции для выполнения обновлений, а затем вызвать эти функции в рамках данной транзакции. Дополнительные сведения о выборке массовых строк см. в разделе Recordseting Records: Получение записей в пакетной службе (ODBC).
Примечание.
Помимо влияния на набор записей, транзакции влияют на инструкции SQL, выполняемые непосредственно при использовании ODBC HDBC, связанного с CDatabase
объектом или ODBC HSTMT на основе этого HDBC.
Транзакции особенно полезны при наличии нескольких записей, которые должны обновляться одновременно. В этом случае необходимо избежать полузавершенной транзакции, например, если исключение было вызвано до последнего обновления. Группирование таких обновлений в транзакцию позволяет восстановить (откат) от изменений и вернуть записи в состояние предварительной передачи. Например, если банковские деньги передаются с учетной записи А на счет B, то как вывод из А, так и депозит в B, должен завершиться успешной обработкой средств или вся транзакция должна завершиться ошибкой.
В классах базы данных транзакции выполняются через CDatabase
объекты. CDatabase
Объект представляет подключение к источнику данных, а один или несколько наборов записей, связанных с этим CDatabase
объектом, работают с таблицами базы данных через функции-члены набора записей.
Примечание.
Поддерживается только один уровень транзакций. Не удается вложить транзакции и не может охватывать несколько объектов базы данных.
Дополнительные сведения о выполнении транзакций см. в следующих разделах.