Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Подтверждение или откат транзакции приводит к одному из следующих последствий для курсоров и планов доступа:
Все курсоры закрыты, а планы доступа для подготовленных выражений по этому соединению удалены или
Все курсоры закрыты, а планы доступа для подготовленных инструкций по этому подключению остаются неизменными или
Все курсоры остаются открытыми, а планы доступа для подготовленных инструкций по этому подключению остаются неизменными.
Например, предположим, что источник данных демонстрирует первое поведение в этом списке, самое строгое из этих действий. Теперь предположим, что приложение выполняет следующее:
Задает режим фиксации для ручной фиксации.
Создает итоговый набор заказов на продажу по инструкции 1.
Создает набор результатов из строк в заказе на продажу при выполнении операции 2, когда пользователь отмечает этот заказ.
Вызывает SQLExecute, чтобы выполнить позиционированное обновление, подготовленное в заявке 3, когда пользователь обновляет строку.
Вызывает SQLEndTran , чтобы зафиксировать позиционированную инструкцию обновления.
Из-за поведения источника данных вызов SQLEndTran на шаге 5 приводит к закрытию курсоров инструкций 1 и 2 и удалению плана доступа для всех инструкций. Приложение должно повторно использовать операторы 1 и 2 для повторного создания результирующих наборов и повторной настройки инструкции на операторе 3.
В режиме автофиксации функции, отличные от SQLEndTran, выполняют фиксацию транзакций.
SQLExecute или SQLExecDirect В предыдущем примере вызов SQLExecute на шаге 4 фиксирует транзакцию. Это вызывает закрытие курсоров в командах 1 и 2 и удаление плана доступа для всех команд на этом подключении.
SQLBulkOperations или SQLSetPos В предыдущем примере предположим, что на шаге 4 приложение вызывает SQLSetPos с параметром SQL_UPDATE инструкции 2, а не выполнять позиционированную инструкцию обновления по инструкции 3. Это подтверждает транзакцию и приводит к закрытию курсоров на запросах 1 и 2, а также сбрасывает все планы доступа для этого подключения.
SQLCloseCursor В предыдущем примере предположим, что при выделении пользователем другого заказа на продажу приложение вызывает SQLCloseCursor по инструкции 2 перед созданием результата строк для нового заказа на продажу. Вызов SQLCloseCursor подтверждает инструкцию SELECT, которая создала результирующий набор строк, и приводит к закрытию курсора источника данных для оператора 1, а затем отменяет все планы доступа в этом соединении.
Приложения, особенно приложения на основе экрана, в которых пользователь прокручивает результирующий набор и обновляет или удаляет строки, должны быть осторожны в коде вокруг этого поведения.
Чтобы определить поведение источника данных при фиксации или откате транзакции, приложение вызывает SQLGetInfo с параметрами SQL_CURSOR_COMMIT_BEHAVIOR и SQL_CURSOR_ROLLBACK_BEHAVIOR.