接続の遷移
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) | -- | -- |