ドライバー マネージャー
ドライバー マネージャーは、アプリケーションとドライバー間の通信を管理するライブラリです。 たとえば、Microsoft Windows プラットフォームでは、ドライバー マネージャーは Microsoft が記述したダイナミック リンク ライブラリ(DLL)であり、再頒布可能な MDAC 2.8 SP1 SDK のユーザーが再頒布できます。
ドライバー マネージャーは、主にアプリケーションライターの利便性として存在し、すべてのアプリケーションに共通する多くの問題を解決します。 これには、データ ソース名に基づいて読み込むドライバーの決定、ドライバーの読み込みとアンロード、ドライバーでの関数の呼び出しが含まれます。
後者が問題である理由を確認するには、アプリケーションがドライバーの関数を直接呼び出した場合に何が起こるかを検討します。 アプリケーションが特定のドライバーに直接リンクされていない限り、そのドライバー内の関数へのポインターのテーブルを作成し、ポインターによってそれらの関数を呼び出す必要があります。 一度に複数のドライバーに対して同じコードを使用すると、さらに別のレベルの複雑さが増すことになります。 アプリケーションではまず、正しいドライバーで正しい関数を指すように関数ポインターを設定し、そのポインターを介して関数を呼び出す必要があります。
ドライバー マネージャーは、各関数を呼び出す場所を 1 つ提供することで、この問題を解決します。 アプリケーションはドライバー マネージャーにリンクされ、ドライバーではなくドライバー マネージャーで ODBC 関数を呼び出します。 アプリケーションは、接続ハンドルを使用してターゲット ドライバーとデータ ソースを 識別します。 ドライバーをロードすると、ドライバー マネージャーは、そのドライバー内の関数へのポインターのテーブルを構築します。 アプリケーションによって渡された接続ハンドルを使用して、ターゲット ドライバー内の関数のアドレスを検索し、その関数をアドレスで呼び出します。
ほとんどの場合、ドライバー マネージャーは、アプリケーションから正しいドライバーに関数呼び出しを渡すだけです。 ただし、一部の関数 (SQLDataSources、SQLDrivers、SQLGetFunctions) も実装し、基本的なエラー チェックを実行します。 たとえば、ドライバー マネージャーは、ハンドルが null ポインターではないこと、関数が正しい順序で呼び出されていること、および特定の関数引数が有効であることを確認します。 ドライバー マネージャーによってチェックされるエラーの詳細については、各関数のリファレンス セクションと 付録 B: ODBC 状態遷移テーブルを参照してください。
ドライバー マネージャーの最終的な主な役割は、ドライバーの読み込みとアンロードです。 アプリケーションは、ドライバー マネージャーのみを読み込んでアンロードします。 特定のドライバーを使用する場合は、ドライバー マネージャーで接続関数 (SQLConnect、 SQLDriverConnect、または SQLBrowseConnect) を呼び出し、"Accounting "や "SQL Server "など、特定のデータソースやドライバの名前を指定します。この名前を使用して、ドライバー マネージャーは、Sqlsrvr.dll などのドライバーのファイル名のデータ ソース情報を検索します。 次に、ドライバーを読み込み (まだ読み込まれていない場合)、各関数のアドレスをドライバーに格納し、接続関数をドライバーで呼び出します。これにより、ドライバーが初期化され、データ ソースに接続されます。
ドライバーを使用してアプリケーションが完了すると、ドライバー マネージャーで SQLDisconnect が呼び出されます。 ドライバー マネージャーは、データ ソースから切断されるドライバーでこの関数を呼び出します。 ただし、ドライバー マネージャーは、アプリケーションが再接続した場合に備えて、ドライバーをメモリ内に保持します。 アプリケーションがドライバーによって使用されている接続を解放するか、別のドライバーの接続を使用し、他の接続がドライバーを使用していない場合にのみ、ドライバーをアンロードします。 ドライバーの読み込みとアンロードにおけるドライバー マネージャーの役割の詳細については、「接続プロセスにおけるドライバー マネージャーの役割」を参照してください。