Поделиться через


Транзакции в ODBC

Управление транзакциями в ODBC выполняется на уровне соединения. Когда приложение завершает транзакцию, оно фиксирует или откатывает назад все операции со всеми инструкциями, хранящими дескриптор данного соединения. Для фиксации или отката транзакции приложения должны вызывать метод SQLEndTran вместо непосредственного выполнения инструкции COMMIT или ROLLBACK.

Для переключения между двумя режимами управления транзакциями, которые применяются в ODBC, используется метод SQLSetConnectAttr:

  • Режим автоматической фиксации

    Каждая отдельная инструкция языка автоматически фиксируется после успешного завершения. При работе в режиме автоматической фиксации других средств управления транзакциями не требуется.

  • Режим ручной фиксации

    Все выполненные инструкции будут включены в одну и ту же транзакцию, если ее не прекратить явным образом, вызвав SQLEndTran.

Режим автоматической фиксации применяется в ODBC по умолчанию. Любое новое соединение находится в режиме автоматической фиксации, пока не будет вызван метод SQLSetConnectAttr для перехода в режим ручной фиксации. Когда приложение отключает режим автоматической фиксации, следующая инструкция, введенная в базу данных, начнет транзакцию. Эта транзакция остается в силе, пока приложение не вызовет функцию SQLEndTran с параметром SQL_COMMIT либо SQL_ROLLBACK. Команда, посланная в базу данных после вызова функции SQLEndTran, начинает новую транзакцию.

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

Приложения ODBC не должны использовать инструкции языка Transact-SQL — такие, как BEGIN TRANSACTION, COMMIT TRANSACTION и ROLLBACK TRANSACTION — потому что это может привести к ситуации, когда поведение драйвера не определено. Приложение ODBC должно выполняться в режиме автоматической фиксации и не использовать никаких функций или инструкций для управления транзакциями, или работать в режиме ручной фиксации и использовать функцию ODBC SQLEndTran для фиксации и отката транзакций.

См. также

Основные понятия