OLE DB プロバイダー テンプレート (C++)
OLE DB は、Microsoft Universal Data Access 戦略の重要な部分です。 OLE DB の設計により、任意のデータ ソースからの高パフォーマンスのデータ アクセスが可能になります。 データベースからのものかどうかに関係なく、任意の表形式データを OLE DB を使って表示できます。 この柔軟性により、非常に大きな力が得られます。
「OLE DB コンシューマーとプロバイダー」で説明されているように、OLE DB ではコンシューマーとプロバイダーの概念が使われます。 コンシューマーは、データを要求します。プロバイダーは、表形式のデータをコンシューマーに返します。 プログラミングの観点から見ると、このモデルの最も重要な点は、プロバイダーはコンシューマーが実行できる任意の呼び出しを実装する必要があるということです。
プロバイダーとは
OLE DB プロバイダーは COM オブジェクトのセットであり、コンシューマー オブジェクトからのインターフェイス呼び出しを処理して、永続ソース (データ ストアと呼ばれます) からコンシューマーに表形式でデータを転送します。
プロバイダーは、単純なものでも複雑でもかまいません。 プロバイダーは、最低限の機能をサポートすることも、より多くのインターフェイスを実装することで本格的な運用品質をサポートすることもできます。 プロバイダーはテーブルを返すことができ、クライアントはそのテーブルの形式を決定して、そのデータに対する操作を実行できます。
各プロバイダーは、クライアントからの要求を処理する COM オブジェクトの標準セットを実装します。標準とは、すべての OLE DB コンシューマーが、言語に関係なく (C++ や Basic など)、任意のプロバイダーからデータにアクセスできることを意味します。
各 COM オブジェクトには複数のインターフェイスが含まれており、必須のものとオプションのものがあります。 プロバイダーは、必須インターフェイスを実装することで、すべてのクライアントが使用できる必要のある、最低限のレベルの機能を保証します (準拠と呼ばれます)。 プロバイダーは、オプションのインターフェイスを実装して、追加の機能を提供できます。 「OLE DB プロバイダー テンプレートのアーキテクチャ」では、これらのインターフェイスについて詳しく説明されています。 クライアントは、常に QueryInterface
を呼び出して、プロバイダーが特定のインターフェイスをサポートしているかどうかを判断する必要があります。
OLE DB の仕様レベルのサポート
OLE DB プロバイダー テンプレートは、OLE DB Version 2.7 仕様をサポートしています。 OLE DB プロバイダー テンプレートを使うと、準拠レベル 0 のプロバイダーを実装できます。 たとえば、Provider
サンプルでは、テンプレートを使って、DOS DIR コマンドを実行してファイル システムのクエリを行う非 SQL (MS-DOS) コマンド サーバーを実装しています。 Provider
サンプルからは、行セットでディレクトリ情報が返されます。これは、表形式データを返すための OLE DB の標準的なメカニズムです。
OLE DB テンプレートでサポートされている最も単純な種類のプロバイダーは、コマンドを持たない読み取り専用プロバイダーです。 ブックマーク機能や読み取り/書き込み機能のように、コマンドを含むプロバイダーもサポートされています。 追加のコードを記述することで、読み取り/書き込みプロバイダーを実装できます。 動的行セットとトランザクションは、現在のバージョンではサポートされていませんが、必要であれば追加できます。
OLE DB プロバイダーを作成する必要がある場合
常に独自のプロバイダーを作成する必要があるわけではありません。Visual C++ の [データ リンク プロパティ] ダイアログ ボックスには、Microsoft が提供する複数の事前パッケージ済み標準プロバイダーが表示されます。 OLE DB プロバイダーを作成する主な理由は、Universal Data Access 戦略を利用することです。 これには次のような利点があります。
C++、Basic、Visual Basic Scripting Edition など、任意の言語によるデータへのアクセス。 組織内の異なるプログラマーが、使用する言語に関係なく、同じ方法で同じデータにアクセスできます。
データを他のデータ ソース (SQL Server、Excel、Access など) 用に開く。 これは、異なる形式間でデータを転送する場合に便利です。
クロスデータ ソース (異種) 操作への参加。 これは、データ ウェアハウスの効果的な方法です。 OLE DB プロバイダーを使うと、データをネイティブ形式で保持しながら、簡単な操作でアクセスできます。
クエリ処理など、データへの機能の追加。
データの操作方法を制御することによる、データへのアクセスのパフォーマンスの向上。
堅牢性の向上。 1 人のプログラマーだけがアクセスできる独自のデータ形式を使用している場合は、リスクがあります。 OLE DB プロバイダーを使うと、すべてのプログラマーに対してその独自の形式を開放できます。
読み取り専用プロバイダーと更新可能プロバイダー
プロバイダーの複雑さと機能は大きく異なる場合があります。 プロバイダーを読み取り専用プロバイダーと更新可能プロバイダーに分類すると便利です。
- Visual C++ 6.0 では読み取り専用プロバイダーのみがサポートされていました。 「OLE DB プロバイダーの作成」では、読み取り専用プロバイダーの作成方法が説明されています。
- Visual C++ では更新可能プロバイダーがサポートされており、データ ストアの更新 (書き込み) を行うことができます。 更新可能プロバイダーについては、「更新可能なプロバイダーの作成」をご覧ください。UpdatePV サンプルは、更新可能プロバイダーの例です。
詳細については、以下を参照してください: