次の方法で共有


SQLDisconnect 関数

準拠
導入されたバージョン: ODBC 1.0 標準コンプライアンス: ISO 92

の概要
SQLDisconnect は、特定の接続ハンドルに関連付けられている接続を閉じます。

構文

  
SQLRETURN SQLDisconnect(  
     SQLHDBC     ConnectionHandle);  

引数

ConnectionHandle
[入力]接続ハンドル。

収益

SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_ERROR、SQL_INVALID_HANDLE、またはSQL_STILL_EXECUTING。

診断

SQLDisconnect SQL_ERRORまたはSQL_SUCCESS_WITH_INFOを返す場合は、HandleType SQL_HANDLE_DBCと ConnectionHandleの ハンドル を使用して、SQLGetDiagRec 呼び出すことによって、関連付けられた SQLSTATE 値を取得できます。 次の表に、SQLDisconnect によって一般的に返される SQLSTATE 値を示し、この関数のコンテキストでそれぞれについて説明します。"(DM)" という表記は、ドライバー マネージャーによって返される SQLSTATEs の説明の前にあります。 特に明記されていない限り、各 SQLSTATE 値に関連付けられている戻りコードはSQL_ERROR。

SQLSTATE エラー 形容
01000 一般的な警告 ドライバー固有の情報メッセージ。 (関数はSQL_SUCCESS_WITH_INFOを返します。
01002 切断エラー 切断中にエラーが発生しました。 ただし、切断は成功しました。 (関数はSQL_SUCCESS_WITH_INFOを返します。
08003 接続が開かない (DM) ConnectionHandle 引数で指定された接続が開いていません。
25000 トランザクションの状態が無効です ConnectionHandle引数で指定された接続で、処理中のトランザクションが発生しました。 トランザクションはアクティブなままです。
HY000 一般的なエラー 特定の SQLSTATE がなく、実装固有の SQLSTATE が定義されていないエラーが発生しました。 *MessageText バッファー SQLGetDiagRec によって返されるエラー メッセージは、エラーとその原因を説明します。
HY001 メモリ割り当てエラー ドライバーは、関数の実行または完了をサポートするために必要なメモリを割り当てませんでした。
HY008 操作が取り消されました ConnectionHandleに対して非同期処理が有効になりました。 関数が呼び出され、SQLCancelHandle 関数 実行が完了する前に、ConnectionHandle が呼び出されました。 その後、ConnectionHandleで関数が再度呼び出されました。

関数が呼び出され、SQLCancelHandle 実行が完了する前に、マルチスレッド アプリケーション内の別のスレッドから ConnectionHandle で呼び出されました。
HY010 関数シーケンス エラー (DM) ConnectionHandle に関連付けられた StatementHandle に対して非同期実行関数が呼び出され、SQLDisconnect 呼び出されたときにまだ実行されていました。

(DM) 非同期実行関数 (この関数ではない) は、ConnectionHandle に対して呼び出され、この関数が呼び出されたときにまだ実行されていました。

(DM) SQLExecuteSQLExecDirectSQLBulkOperations、または SQLSetPos が、ConnectionHandle に関連付けられた StatementHandle に対して呼び出され、SQL_NEED_DATA返されました。 この関数は、すべての実行時データ パラメーターまたは列に対してデータが送信される前に呼び出されました。
HY013 メモリ管理エラー メモリが不足している可能性があるため、基になるメモリ オブジェクトにアクセスできなかったため、関数呼び出しを処理できませんでした。
HY117 不明なトランザクション状態のため、接続が中断されます。 切断関数と読み取り専用関数のみが許可されます。 (DM) 中断状態の詳細については、SQLEndTran 関数を参照してください。
HYT01 接続タイムアウトの有効期限が切れた データ ソースが要求に応答する前に接続タイムアウト期間の有効期限が切れ、接続がまだアクティブです。 接続タイムアウト期間は、SQLSetConnectAttr(SQL_ATTR_CONNECTION_TIMEOUT) によって設定されます。
IM001 ドライバーは、この関数をサポートしていません (DM) ConnectionHandle に関連付けられているドライバーは、関数をサポートしていません。
IM017 非同期通知モードでポーリングが無効になっている 通知モデルが使用されるたびに、ポーリングは無効になります。
IM018 SQLCompleteAsync は、このハンドルに対する前の非同期操作を完了するために呼び出されていません。 ハンドルに対する前の関数呼び出しがSQL_STILL_EXECUTINGを返し、通知モードが有効になっている場合は、後処理を実行して操作を完了するために、SQLCompleteAsync をハンドルで呼び出す必要があります。

コメント

SQLBrowseConnect がSQL_NEED_DATAを返した後、別のリターン コードを返す前に、アプリケーションが SQLDisconnect 呼び出した場合、ドライバーは接続参照プロセスをキャンセルし、接続されていない状態に接続を返します。

接続ハンドル 関連付けられた不完全なトランザクションがある間にアプリケーションが SQLDisconnect を呼び出すと、ドライバーは SQLSTATE 25000 (無効なトランザクション状態) を返し、トランザクションが変更されず、接続が開かれていることを示します。 不完全なトランザクションとは、SQLEndTranでコミットまたはロールバックされていないトランザクションです。

接続に関連付けられているすべてのステートメントを解放する前にアプリケーションが SQLDisconnect 呼び出すと、ドライバーはデータ ソースから正常に切断された後、それらのステートメントと、接続に明示的に割り当てられているすべての記述子を解放します。 ただし、接続に関連付けられている 1 つ以上のステートメントが非同期的に実行されている場合、SQLDisconnect は、SQLSTATE 値 HY010 (関数シーケンス エラー) でSQL_ERRORを返します。 また、SQLDisconnect 、接続が中断状態にある場合、または SQLDisconnect が SQLCancelHandleによって正常に取り消された場合 、接続に明示的に割り当てられているすべての関連ステートメントと記述子 解放されます。

アプリケーションで SQLDisconnect使用する方法については、「データ ソースまたはドライバーからの切断」を参照してください。

プールされた接続からの切断

共有環境で接続プールが有効になっていて、アプリケーションがその環境の接続 SQLDisconnect を呼び出した場合、接続は接続プールに返され、同じ共有環境を使用する他のコンポーネントでも引き続き使用できます。

コード例

サンプル ODBC プログラムのSQLBrowseConnect 関数、および SQLConnect 関数参照してください。

詳細については、次の情報を参照してください。 見る
ハンドルの割り当て SQLAllocHandle 関数 の
データ ソースへの接続 SQLConnect 関数の
接続文字列またはダイアログ ボックスを使用してデータ ソースに接続する SQLDriverConnect 関数 の
コミットまたはロールバック操作の実行 SQLEndTran 関数 の
接続ハンドルの解放 SQLFreeConnect 関数 の

関連項目

ODBC API リファレンス
ODBC ヘッダー ファイル の