共用方式為


連線轉換

ODBC 連接具有下列狀態。

State 描述
C0 未配置的環境、未配置的連接
C1 已配置的環境、未配置的連接
C2 已配置的環境、已配置的連線
C3 線上函式需要數據
C4 線上連線
C5 線上聯機,已配置的語句
C6 已連線的連線、進行中的交易。 連接可能處於狀態 C6,且連接上未配置任何語句。 例如,假設聯機處於手動認可模式,且處於狀態 C4。 如果已配置語句、執行 (啟動交易),然後釋放,交易會維持使用中狀態,但連接上沒有語句。

下表顯示每個 ODBC 函式如何影響連接狀態。

SQLAllocHandle

C0

沒有 Env。
C1 未配置 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] 當 HandleType SQL_HANDLE_ENV時,此數據列會顯示轉換。

[2] 當 HandleType 已SQL_HANDLE_DBC時,此數據列會顯示轉換。

[3] 當 HandleType SQL_HANDLE_STMT時,此數據列會顯示轉換。

[4] 當 HandleType SQL_HANDLE_DESC時,此數據列會顯示轉換。

[5] 使用 OutputHandlePtr 呼叫 SQLAllocHandle,指出有效的句柄會覆寫該句柄,而不考慮該句柄先前的內容,而且可能會導致 ODBC 驅動程式發生問題。 ODBC 應用程式程式設計不正確,使用針對 *OutputHandlePtr 定義的相同應用程式變數來呼叫 SQLAllocHandle 兩次,而不需呼叫 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、SQLProcedures、SQLSpecialColumns、SQLStatistics、SQLTablePrivileges 和 SQLTables

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 25000

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] 當 HandleType SQL_HANDLE_ENV時,此數據列會顯示轉換。

[2] 當 HandleType 已SQL_HANDLE_DBC時,此數據列會顯示轉換。

[3] 因為連線不是處於連線狀態,所以不會受到交易影響。

[4] 連線上的認可或復原失敗。 在此情況下,函式會傳回SQL_ERROR。

[5] 連線上的認可或復原成功。 如果認可或復原在另一個連線上失敗,或函式傳回SQL_SUCCESS認可或回復成功,則函式會傳回SQL_ERROR。

[6] 連接上至少有一個語句已配置。

[7] 沒有在連接上配置的語句。

[8] 連接至少有一個語句有開啟的數據指標,而且數據源會在認可或回復交易時保留數據指標,無論套用哪一個(視 CompletionTypeSQL_COMMIT還是SQL_ROLLBACK而定)。 如需詳細資訊,請參閱 SQLGetInfo 中的SQL_CURSOR_COMMIT_BEHAVIOR和SQL_CURSOR_ROLLBACK_BEHAVIOR屬性。

[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] 當 HandleType SQL_HANDLE_ENV時,此數據列會顯示轉換。

[2] 當 HandleType 已SQL_HANDLE_DBC時,此數據列會顯示轉換。

[3] 當 HandleType SQL_HANDLE_STMT時,此數據列會顯示轉換。

[4] 當 HandleType SQL_HANDLE_DESC時,此數據列會顯示轉換。

[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] Attribute 自變數SQL_ATTR_ACCESS_MODE、SQL_ATTR_AUTOCOMMIT、SQL_ATTR_LOGIN_TIMEOUT、SQL_ATTR_ODBC_CURSORS、SQL_ATTR_TRACE或SQL_ATTR_TRACEFILE,或已設定連接屬性的值。

[2] Attribute 自變數未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] 當 HandleType SQL_HANDLE_ENV時,此數據列會顯示轉換。

[2] 當 HandleType 已SQL_HANDLE_DBC時,此數據列會顯示轉換。

[3] 當 HandleType SQL_HANDLE_STMT時,此數據列會顯示轉換。

[4] 當 HandleType SQL_HANDLE_DESC時,此數據列會顯示轉換。

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] and [6] C5[8] 08002[4] HY011[5] 或 [7]

[1] Attribute 自變數未SQL_ATTR_TRANSLATE_LIB或SQL_ATTR_TRANSLATE_OPTION。

[2] Attribute 自變數已SQL_ATTR_TRANSLATE_LIB或SQL_ATTR_TRANSLATE_OPTION。

[3] Attribute 自變數未SQL_ATTR_ODBC_CURSORS或SQL_ATTR_PACKET_SIZE。

[4] Attribute 自變數已SQL_ATTR_ODBC_CURSORS。

[5] Attribute 自變數已SQL_ATTR_PACKET_SIZE。

[6] Attribute 自變數未SQL_ATTR_AUTOCOMMIT,或 Attribute 自變數SQL_ATTR_AUTOCOMMIT且設定此屬性未認可交易。

[7] Attribute 自變數已SQL_ATTR_TXN_ISOLATION。

[8] Attribute 自變數已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) -- --