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


Поддержка транзакций

Степень поддержки транзакций определяется драйвером. ODBC предназначен для реализации в однопользовательской или классической базе данных, которая не требует управления несколькими обновлениями данных. Кроме того, некоторые базы данных, поддерживающие транзакции, делают это только для инструкций языка обработки данных (DML) SQL; Существуют ограничения или специальные семантики транзакций в отношении использования языка определения данных (DDL) при активной транзакции. То есть может быть поддержка транзакций для нескольких одновременных обновлений таблиц, но не для изменения числа и определения таблиц во время транзакции.

Приложение определяет, поддерживаются ли транзакции, могут ли DDL быть включены в транзакцию, и любые специальные эффекты включения DDL в транзакцию путем вызова SQLGetInfo с параметром SQL_TXN_CAPABLE. Дополнительные сведения см. в описании функции SQLGetInfo .

Если драйвер не поддерживает транзакции, но приложение может (с помощью API, отличного от ODBC) блокировать и разблокировать данные, приложения могут обеспечить поддержку транзакций путем блокировки и разблокировки записей и таблиц по мере необходимости. Чтобы реализовать пример передачи учетных записей, приложение заблокирует записи для обеих учетных записей, копирует текущие значения, дебетет первую учетную запись, кредитует вторую учетную запись и разблокирует записи. Если не удалось выполнить какие-либо действия, приложение сбросит учетные записи с помощью копий.

Даже источники данных, поддерживающие транзакции, могут не поддерживать несколько транзакций за раз в определенной среде. Приложения вызывают SQLGetInfo с параметром SQL_MULTIPLE_ACTIVE_TXN, чтобы определить, может ли источник данных поддерживать одновременные активные транзакции в нескольких соединениях в одной среде. Так как для каждого подключения существует одна транзакция, это интересно только для приложений, имеющих несколько подключений к одному источнику данных.