連線轉換
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] 連接至少有一個語句有開啟的數據指標,而且數據源會在認可或回復交易時保留數據指標,無論套用哪一個(視 CompletionType 是SQL_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) | -- | -- |