接続の遷移

ODBC 接続の状態は次のとおりです。

State 説明
C0 未割り当て環境、未割り当て接続
C1 割り当てられた環境、未割り当て接続
C2 割り当てられた環境、割り当てられた接続
C3 接続関数にはデータが必要です
C4 接続済み接続
C5 接続接続、割り当て済みステートメント
C6 接続済み接続、トランザクションの進行中。 接続にステートメントが割り当てられていない状態で、接続が C6 状態になる可能性があります。 たとえば、接続が手動コミット モードで、状態 C4 にあるとします。 ステートメントが割り当てられ、実行され (トランザクションを開始する)、解放された場合、トランザクションはアクティブなままですが、接続にステートメントはありません。

次の表は、各 ODBC 関数が接続状態にどのように影響するかを示しています。

SQLAllocHandle

C0

Env なし。
C1 未割り当て C2

Allocated
C3

データが必要
C4

接続済み
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] SQLAllocHandle OutputHandlePtr を指す有効なハンドルを呼び出すと、そのハンドルの前の内容に関係なくそのハンドルが上書きされ、ODBC ドライバーに問題が発生する可能性があります。 *OutputHandlePtr に対して定義されているのと同じアプリケーション変数を使用して SQLAllocHandle を 2 回呼び出しSQLFreeHandleを呼び出さずにハンドルを解放するのは、ODBC アプリケーション プログラミングでは正しくありません。 このような方法で ODBC ハンドルを上書きすると、ODBC ドライバーの動作やエラーが一貫性を失う可能性があります。

SQLBrowseConnect

C0

Env なし。
C1

未割り当て
C2

Allocated
C3

データが必要
C4

接続済み
C5

ステートメント
C6

取引
(IH) (IH) C3 [d] C4 [s] -- [d] C2 [e] C4 [s] (08002) (08002) (08002)

SQLCloseCursor

C0

Env なし。
C1

未割り当て
C2

Allocated
C3

データが必要
C4

接続済み
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

Allocated
C3

データが必要
C4

接続済み
C5

ステートメント
C6

取引
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] --

[1] 接続が自動コミット モードであったか、データ ソースがトランザクションを開始しませんでした。

[2] 接続は手動コミット モードで、データ ソースはトランザクションを開始しました。

SQLConnect

C0

Env なし。
C1

未割り当て
C2

Allocated
C3

データが必要
C4

接続済み
C5

ステートメント
C6

取引
(IH) (IH) C4 (08002) (08002) (08002) (08002)

SQLCopyDesc、SQLGetDescField、SQLGetDescRec、SQLSetDescField、SQLSetDescRec

C0

Env なし。
C1

未割り当て
C2

Allocated
C3

データが必要
C4

接続済み
C5

ステートメント
C6

取引
(IH) (IH) (IH) (IH) --[1] -- --

[1] この状態では、アプリケーションで使用できる記述子は明示的に割り当てられた記述子のみです。

SQLDataSources と SQLDrivers

C0

Env なし。
C1

未割り当て
C2

Allocated
C3

データが必要
C4

接続済み
C5

ステートメント
C6

取引
(IH) -- -- -- -- -- --

SQLDisconnect

C0

Env なし。
C1

未割り当て
C2

Allocated
C3

データが必要
C4

接続済み
C5

ステートメント
C6

取引
(IH) (IH) (08003) C2 C2 C2 25000

SQLDriverConnect

C0

Env なし。
C1

未割り当て
C2

Allocated
C3

データが必要
C4

接続済み
C5

ステートメント
C6

取引
(IH) (IH) C4 s -- n[f] (08002) (08002) (08002) (08002)

SQLEndTran

C0

Env なし。
C1

未割り当て
C2

Allocated
C3

データが必要
C4

接続済み
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_ERRORを返すか、コミットまたはロールバックがすべての接続で成功した場合にSQL_SUCCESSを返します。

[6] 接続に少なくとも 1 つのステートメントが割り当てられています。

[7] 接続に割り当てられたステートメントがありませんでした。

[8] 接続には、開いているカーソルが存在するステートメントが少なくとも 1 つあり、トランザクションがコミットまたはロールバックされたときにカーソルが保持されます ( CompletionType がSQL_COMMITされたかSQL_ROLLBACKであるかによって異なります)。 詳細については、 SQLGetInfo のSQL_CURSOR_COMMIT_BEHAVIOR属性とSQL_CURSOR_ROLLBACK_BEHAVIOR属性を参照してください。

[9] 接続に開いているカーソルがあるステートメントがある場合、トランザクションがコミットまたはロールバックされたときにカーソルは保持されませんでした。

SQLExecDirect と SQLExecute

C0

Env なし。
C1

未割り当て
C2

Allocated
C3

データが必要
C4

接続済み
C5

ステートメント
C6

取引
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] C6[3] --

[1] 接続が自動コミット モードで、実行されたステートメントが cursor specification (SELECT ステートメントなど) でなかったか、接続が手動コミット モードで、実行されたステートメントはトランザクションを開始しませんでした。

[2] 接続は自動コミット モードで、実行されたステートメントは cursor specification (SELECT ステートメントなど) でした。

[3] 接続は手動コミット モードで、データ ソースはトランザクションを開始しました。

SQLFreeHandle

C0

Env なし。
C1

未割り当て
C2

Allocated
C3

データが必要
C4

接続済み
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] 接続に割り当てられたステートメントは 1 つだけでした。

[6] 接続に複数のステートメントが割り当てられていた。

[7] 接続は手動コミット モードでした。

[8] 接続は自動コミット モードでした。

SQLFreeStmt

C0

Env なし。
C1

未割り当て
C2

Allocated
C3

データが必要
C4

接続済み
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] 接続が手動コミット モードであったか、自動コミット モードで、少なくとも 1 つの他のステートメントでカーソルが開かれていました。

SQLGetConnectAttr

C0

Env なし。
C1

未割り当て
C2

Allocated
C3

データが必要
C4

接続済み
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

Allocated
C3

データが必要
C4

接続済み
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

Allocated
C3

データが必要
C4

接続済み
C5

ステートメント
C6

取引
IH -- -- -- -- -- --

SQLGetFunctions

C0

Env なし。
C1

未割り当て
C2

Allocated
C3

データが必要
C4

接続済み
C5

ステートメント
C6

取引
IH IH HY010 HY010 -- -- --

SQLGetInfo

C0

Env なし。
C1

未割り当て
C2

Allocated
C3

データが必要
C4

接続済み
C5

ステートメント
C6

取引
IH IH --[1] 08003[2] 08003 -- -- --

[1] 引数 InfoType がSQL_ODBC_VERされました。

[2] 引数 InfoType がSQL_ODBC_VERされませんでした。

SQLMoreResults

C0

Env なし。
C1

未割り当て
C2

Allocated
C3

データが必要
C4

接続済み
C5

ステートメント
C6

取引
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] --[3] C5[1]

[1] 接続は自動コミット モードであり、 SQLMoreResults の呼び出しによってカーソル指定の結果セットの処理が初期化されていません。

[2] 接続は自動コミット モードで、 SQLMoreResults の呼び出しによってカーソル指定の結果セットの処理が初期化されました。

[3] 接続は手動コミット モードでした。

SQLNativeSql

C0

Env なし。
C1

未割り当て
C2

Allocated
C3

データが必要
C4

接続済み
C5

ステートメント
C6

取引
(IH) (IH) (08003) (08003) -- -- --

SQLPrepare

C0

Env なし。
C1

未割り当て
C2

Allocated
C3

データが必要
C4

接続済み
C5

ステートメント
C6

取引
(IH) (IH) (IH) (IH) (IH) --[1] C6[2] --

[1] 接続が自動コミット モードであったか、データ ソースがトランザクションを開始しませんでした。

[2] 接続は手動コミット モードで、データ ソースはトランザクションを開始しました。

SQLSetConnectAttr

C0

Env なし。
C1

未割り当て
C2

Allocated
C3

データが必要
C4

接続済み
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] 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されました。

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

Allocated
C3

データが必要
C4

接続済み
C5

ステートメント
C6

取引
(IH) -- -- (HY010) -- -- --

その他すべての ODBC 関数

C0

Env なし。
C1

未割り当て
C2

Allocated
C3

データが必要
C4

接続済み
C5

ステートメント
C6

取引
(IH) (IH) (IH) (IH) (IH) -- --