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