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


Переходы подключения

Подключения ODBC имеют следующие состояния.

State Description
C0 Нераспределенная среда, нераспределированное подключение
C1 Выделенная среда, нераспределированное подключение
C2 Выделенная среда, выделенное подключение
C3 Для функции подключения требуются данные
C4 Подключено подключение
C5 Подключено подключение, выделенная инструкция
C6 Подключено подключение, транзакция выполняется. Подключение может находиться в состоянии C6 без инструкций, выделенных для подключения. Например, предположим, что подключение находится в режиме фиксации вручную и находится в состоянии C4. Если инструкция выделена, выполнена (запуск транзакции), а затем освобождена, транзакция остается активной, но в соединении нет инструкций.

В следующих таблицах показано, как каждая функция ODBC влияет на состояние подключения.

SQLAllocHandle

C0

Нет Env.
C1 Unallocated C2

Распределено
C3

Требуются данные
C4

Connected
C5

Оператор
C6

Транзакция
C1[1] --[5] --[5] --[5] --[5] --[5] --[5]
(IH)[2] C2 --[5] --[5] --[5] --[5] --[5]
(IH)[3] (IH) (08003) (08003) C5 --[5] --[5]
(IH)[4] (IH) (08003) (08003) --[5] --[5] --[5]

[1] Эта строка показывает переходы при SQL_HANDLE_ENV HandleType .

[2] Эта строка показывает переходы при SQL_HANDLE_DBC HandleType .

[3] Эта строка показывает переходы при SQL_HANDLE_STMT HandleType .

[4] Эта строка показывает переходы при SQL_HANDLE_DESC HandleType .

[5] Вызов SQLAllocHandle с outputHandlePtr , указывающий на допустимые перезаписи дескрипторов, которые обрабатываются без учета предыдущего содержимого дескриптора, и могут вызвать проблемы с драйверами ODBC. Неправильное программирование приложения ODBC для вызова SQLAllocHandle дважды с той же переменной приложения, определенной для *OutputHandlePtr без вызова SQLFreeHandle, чтобы освободить дескриптор перед перераспредещением. Перезапись дескрипторов ODBC таким образом может привести к несогласованному поведению или ошибкам со стороны драйверов ODBC.

SQLBrowseConnect

C0

Нет Env.
C1

Не выделено
C2

Распределено
C3

Требуются данные
C4

Connected
C5

Оператор
C6

Транзакция
(IH) (IH) C3 [d] C4 [s] -- [d] C2 [e] C4 [s] (08002) (08002) (08002)

SQLCloseCursor

C0

Нет Env.
C1

Не выделено
C2

Распределено
C3

Требуются данные
C4

Connected
C5

Оператор
C6

Транзакция
(IH) (IH) (IH) (IH) (IH) -- --[1] C5[2]

[1] Подключение было в режиме ручной фиксации.

[2] Подключение было в режиме автоматической фиксации.

SQLColumnPrivileges, SQLColumns, SQLForeignKeys, SQLGetTypeInfo, SQLPrimaryKeys, SQLProcedureColumns, SQLProcedureColumns, SQLSpecialColumns, SQLStatistics, SQLTablePrivileges и SQLTable

C0

Нет Env.
C1

Не выделено
C2

Распределено
C3

Требуются данные
C4

Connected
C5

Оператор
C6

Транзакция
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] --

[1] Подключение было в режиме автоматической фиксации, или источник данных не начал транзакцию.

[2] Подключение было в режиме ручной фиксации, и источник данных начал транзакцию.

SQLConnect

C0

Нет Env.
C1

Не выделено
C2

Распределено
C3

Требуются данные
C4

Connected
C5

Оператор
C6

Транзакция
(IH) (IH) C4 (08002) (08002) (08002) (08002)

SQLCopyDesc, SQLGetDescField, SQLGetDescRec, SQLSetDescField и SQLSetDescRec

C0

Нет Env.
C1

Не выделено
C2

Распределено
C3

Требуются данные
C4

Connected
C5

Оператор
C6

Транзакция
(IH) (IH) (IH) (IH) --[1] -- --

[1] В этом состоянии только дескрипторы, доступные приложению, явно выделяются дескрипторами.

SQLDataSources и SQLDrivers

C0

Нет Env.
C1

Не выделено
C2

Распределено
C3

Требуются данные
C4

Connected
C5

Оператор
C6

Транзакция
(IH) -- -- -- -- -- --

SQLDisconnect

C0

Нет Env.
C1

Не выделено
C2

Распределено
C3

Требуются данные
C4

Connected
C5

Оператор
C6

Транзакция
(IH) (IH) (08003) C2 C2 C2 25 000

SQLDriverConnect

C0

Нет Env.
C1

Не выделено
C2

Распределено
C3

Требуются данные
C4

Connected
C5

Оператор
C6

Транзакция
(IH) (IH) C4 s -- n[f] (08002) (08002) (08002) (08002)

SQLEndTran

C0

Нет Env.
C1

Не выделено
C2

Распределено
C3

Требуются данные
C4

Connected
C5

Оператор
C6

Транзакция
(IH)[1] --[3] --[3] --[3] -- -- --[4] или ([5], [6], и [8]) C4[5] и [7] C5[5], [6], и [9]
(IH)[2] (IH) (08003) (08003) -- -- C5

[1] Эта строка показывает переходы при SQL_HANDLE_ENV HandleType .

[2] Эта строка показывает переходы при SQL_HANDLE_DBC HandleType .

[3] Так как подключение не находится в подключенном состоянии, оно не влияет на транзакцию.

[4] Сбой фиксации или отката подключения. Функция возвращает SQL_ERROR в этом случае.

[5] Фиксация или откат выполнена успешно в соединении. Функция возвращает SQL_ERROR, если фиксация или откат не выполнена в другом соединении, или функция возвращает SQL_SUCCESS, если фиксация или откат выполнена успешно во всех подключениях.

[6] Существовал по крайней мере один оператор, выделенный для подключения.

[7] В соединении не было выделено никаких инструкций.

[8] Подключение имело по крайней мере одну инструкцию, для которой был открытый курсор, и источник данных сохраняет курсоры при фиксации или откате транзакций, в зависимости от того, SQL_COMMIT или SQL_ROLLBACK. Дополнительные сведения см. в атрибутах SQL_CURSOR_COMMIT_BEHAVIOR и SQL_CURSOR_ROLLBACK_BEHAVIOR в SQLGetInfo.

[9] Если подключение имело какие-либо операторы, для которых были открытые курсоры, курсоры не сохранялись при фиксации или откате транзакции.

SQLExecDirect и SQLExecute

C0

Нет Env.
C1

Не выделено
C2

Распределено
C3

Требуются данные
C4

Connected
C5

Оператор
C6

Транзакция
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] C6[3] --

[1] Подключение было в режиме автоматической фиксации, и выполненная инструкция не была спецификацией курсора (например, инструкцией SELECT); или соединение было в режиме ручной фиксации, и инструкция, выполненная не была транзакцией.

[2] Подключение было в режиме автоматической фиксации, и инструкция, выполненная, была спецификацией курсора (например, инструкцией SELECT).

[3] Подключение было в режиме ручной фиксации, и источник данных начал транзакцию.

SQLFreeHandle

C0

Нет Env.
C1

Не выделено
C2

Распределено
C3

Требуются данные
C4

Connected
C5

Оператор
C6

Транзакция
(IH)[1] C0 (HY010) (HY010) (HY010) (HY010) (HY010)
(IH)[2] (IH) (C1) (HY010) (HY010) (HY010) (HY010)
(IH)[3] (IH) (IH) (IH) (IH) C4[5] --[6] --[7] C4[5] и [8] C5[6] и [8]
(IH)[4] (IH) (IH) (IH) -- -- --

[1] Эта строка показывает переходы при SQL_HANDLE_ENV HandleType .

[2] Эта строка показывает переходы при SQL_HANDLE_DBC HandleType .

[3] Эта строка показывает переходы при SQL_HANDLE_STMT HandleType .

[4] Эта строка показывает переходы при SQL_HANDLE_DESC HandleType .

[5] Существовал только один оператор, выделенный для подключения.

[6] В соединении было выделено несколько операторов.

[7] Подключение было в режиме ручной фиксации.

[8] Подключение было в режиме автоматической фиксации.

Функция SQLFreeStmt

C0

Нет Env.
C1

Не выделено
C2

Распределено
C3

Требуются данные
C4

Connected
C5

Оператор
C6

Транзакция
(IH)[1] (IH) (IH) (IH) (IH) -- C5[3] --[4]
(IH)[2] (IH) (IH) (IH) (IH) -- --

[1] Эта строка показывает транзакции, когда аргумент Option SQL_CLOSE.

[2] Эта строка показывает транзакции, когда аргумент Option SQL_UNBIND или SQL_RESET_PARAMS.

[3] Подключение было в режиме автоматической фиксации, и курсоры не были открыты для любых инструкций, кроме этого.

[4] Подключение было в режиме ручной фиксации или было в режиме автоматической фиксации, и курсор был открыт по крайней мере на одну другую инструкцию.

SQLGetConnectAttr

C0

Нет Env.
C1

Не выделено
C2

Распределено
C3

Требуются данные
C4

Connected
C5

Оператор
C6

Транзакция
IH IH --[1] 08003[2] HY010 -- -- --

[1] Аргумент атрибута был SQL_ATTR_ACCESS_MODE, SQL_ATTR_AUTOCOMMIT, SQL_ATTR_LOGIN_TIMEOUT, SQL_ATTR_ODBC_CURSORS, SQL_ATTR_TRACE или SQL_ATTR_TRACEFILE или был задан для атрибута подключения.

[2] Аргумент атрибута не был SQL_ATTR_ACCESS_MODE, SQL_ATTR_AUTOCOMMIT, SQL_ATTR_LOGIN_TIMEOUT, SQL_ATTR_ODBC_CURSORS, SQL_ATTR_TRACE или SQL_ATTR_TRACEFILE, а для атрибута подключения не задано значение.

SQLGetDiagField и SQLGetDiagRec

C0

Нет Env.
C1

Не выделено
C2

Распределено
C3

Требуются данные
C4

Connected
C5

Оператор
C6

Транзакция
(IH)[1] -- -- -- -- -- --
(IH)[2] (IH) -- -- -- -- --
(IH)[3] (IH) (IH) (IH) (IH) -- --
(IH)[4] (IH) (IH) (IH) -- -- --

[1] Эта строка показывает переходы при SQL_HANDLE_ENV HandleType .

[2] Эта строка показывает переходы при SQL_HANDLE_DBC HandleType .

[3] Эта строка показывает переходы при SQL_HANDLE_STMT HandleType .

[4] Эта строка показывает переходы при SQL_HANDLE_DESC HandleType .

SQLGetEnvAttr

C0

Нет Env.
C1

Не выделено
C2

Распределено
C3

Требуются данные
C4

Connected
C5

Оператор
C6

Транзакция
IH -- -- -- -- -- --

SQLGetFunctions

C0

Нет Env.
C1

Не выделено
C2

Распределено
C3

Требуются данные
C4

Connected
C5

Оператор
C6

Транзакция
IH IH HY010 HY010 -- -- --

SQLGetInfo

C0

Нет Env.
C1

Не выделено
C2

Распределено
C3

Требуются данные
C4

Connected
C5

Оператор
C6

Транзакция
IH IH --[1] 08003[2] 08003 -- -- --

[1] Аргумент InfoType был SQL_ODBC_VER.

[2] Аргумент InfoType не был SQL_ODBC_VER.

SQLMoreResults

C0

Нет Env.
C1

Не выделено
C2

Распределено
C3

Требуются данные
C4

Connected
C5

Оператор
C6

Транзакция
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] --[3] C5[1]

[1] Подключение было в режиме автоматической фиксации, и вызов SQLMoreResults не инициализировал обработку результирующий набор спецификации курсора.

[2] Подключение было в режиме автоматической фиксации, и вызов SQLMoreResults инициализировал обработку результирующий набор спецификации курсора.

[3] Подключение было в режиме ручной фиксации.

SQLNativeSql

C0

Нет Env.
C1

Не выделено
C2

Распределено
C3

Требуются данные
C4

Connected
C5

Оператор
C6

Транзакция
(IH) (IH) (08003) (08003) -- -- --

SQLPrepare

C0

Нет Env.
C1

Не выделено
C2

Распределено
C3

Требуются данные
C4

Connected
C5

Оператор
C6

Транзакция
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] --

[1] Подключение было в режиме автоматической фиксации, или источник данных не начал транзакцию.

[2] Подключение было в режиме ручной фиксации, и источник данных начал транзакцию.

SQLSetConnectAttr

C0

Нет Env.
C1

Не выделено
C2

Распределено
C3

Требуются данные
C4

Connected
C5

Оператор
C6

Транзакция
IH IH --[1] 08003[2] HY010 --[3] 08002[4] HY011[5] --[3] 08002[4] HY011[5] --[3] и [6] C5[8] 08002[4] HY011[5] или [7]

[1] Аргумент атрибута не был SQL_ATTR_TRANSLATE_LIB или SQL_ATTR_TRANSLATE_OPTION.

[2] Аргумент атрибута был SQL_ATTR_TRANSLATE_LIB или SQL_ATTR_TRANSLATE_OPTION.

[3] Аргумент атрибута не был SQL_ATTR_ODBC_CURSORS или SQL_ATTR_PACKET_SIZE.

[4] Аргумент атрибута был SQL_ATTR_ODBC_CURSORS.

[5] Аргумент атрибута был SQL_ATTR_PACKET_SIZE.

[6] Аргумент атрибута не был SQL_ATTR_AUTOCOMMIT, или аргумент атрибута был SQL_ATTR_AUTOCOMMIT, и установка этого атрибута не зафиксировала транзакцию.

[7] Аргумент атрибута был SQL_ATTR_TXN_ISOLATION.

[8] Аргумент атрибута был SQL_ATTR_AUTOCOMMIT и задал этот атрибут фиксации транзакции.

SQLSetEnvAttr

C0

Нет Env.
C1

Не выделено
C2

Распределено
C3

Требуются данные
C4

Connected
C5

Оператор
C6

Транзакция
(IH) -- -- (HY010) -- -- --

Все остальные функции ODBC

C0

Нет Env.
C1

Не выделено
C2

Распределено
C3

Требуются данные
C4

Connected
C5

Оператор
C6

Транзакция
(IH) (IH) (IH) (IH) (IH) -- --