OLE DB Provider Guide (v11)

OLE DB プロバイダーのアーキテクチャ

Pervasive OLE DB は、Microsoft が作成した OLE DB プロバイダー仕様の Pervasive Software における実装名です。

リレーショナル アクセスの場合、プロバイダーはネットーワーク プロトコルを介してデータベース エンジンに接続します。サーバー エンジンがリクエストを処理し、そのデータをプロバイダーに戻します。プロバイダーは必要な処理を行ってクライアントにデータを渡します。プロバイダーは ODBC クライアント インターフェイスと同じプロトコルを使用します。

次の図は、OLE DB プロバイダーのアーキテクチャを示しています。

図 1 Pervasive PSQL OLE DB プロバイダーのアーキテクチャ

リレーショナル パフォーマンス

Pervasive OLE DB プロバイダーでは、ODBC および JDBC ドライバーがリモート サーバーと通信する方法と同様のアーキテクチャを使用します。サーバー側のリレーショナル エンジンを使用することによって、ストアド プロシージャや複雑なクエリを含め、このプロバイダーの使用によるほとんどの SQL ベースのパフォーマンスが向上します。

リモート接続

接続文字列内で Location パラメーターを使用してリモート サーバーを指定します。

Provider=PervasiveOLEDB;Data Source=MyDBname;
Location=MyServer 

詳細については、リモート接続を参照してください。

排他的カーソル

データベース プログラミングにおいて、その他のクライアントがレコードのロックに遭遇する可能性が高くなるリスクを負っても、確実に更新を行うことを優先する必要がある場合があります。

レコードセットを取得してバッチ更新を指定した場合、更新しようとした行が別のクライアントによって更新されていたために、並行性違反が発生する場合があります。排他的カーソルを設定することによってこれらの状況を回避することができます。

詳細については、排他的カーソルを参照してください。

ADO Refresh メソッドのサポート

Pervasive PSQL OLE DB プロバイダーでは、Command オブジェクトの Parameters コレクションの Refresh メソッドをサポートするので、ストアド プロシージャまたはパラメーター クエリからパラメーター情報を取得できます。

詳細については、ADO Refresh メソッドのサポート例を参照してください。

以前の OLE DB プロバイダーの確認

現在のバージョンとの比較のために、このセクションでは以前のプロバイダーの概要について簡単に説明します。Pervasive では Pervasive.SQL 2000i リリース Service Pack 2 で初めて OLE DB プロバイダーを装備しました。本リリースは第 3 世代のプロバイダーです。

最初のバージョン:Pervasive.SQL 2000i(SP2)

Pervasive の最初のプロバイダーはトランザクショナル(Btrieve)のみでした。リレーショナル アクセスの場合は、Microsoft の ODBC to OLE DB ブリッジ プロバイダーを使用する必要がありました。次の図は、最初の Pervasive OLE DB プロバイダーのアーキテクチャを示しています。

図 2 最初の OLE DB プロバイダーのアーキテクチャ

2 番目のバージョン:Pervasive.SQL 2000i(SP3、SP4)

Pervasive では、Pervasive.SQL 2000i でリレーショナル アクセスを可能にする最新のプロバイダーをリリースしました。これを使用すれば、開発者は同じ API を使ってリレーショナル アクセスおよびトランザクショナル アクセスを行うことができます。データへの更新は、トランザクション内でカプセル化することも、リレーショナル アクセスとトランザクショナル アクセス間でカプセル化することも可能です。さらに、このプロバイダーには ADOX 機能がいくつか組み込まれており、SQL 機能に加えてデータベース作成も行うことができました。

図 3 2 番目の OLE DB プロバイダーのアーキテクチャ

この 2 番目のバージョンのプロバイダーには、欠点がいくつかありました。リレーショナル エンジンがこのプロバイダーにカプセル化されるために、クライアント ベース と見なされていました。このため、プロバイダーは行ごとにクライアント プロセスとサーバー プロセスの境界を越える必要があり、クライアント/サーバー 設定のアプリケーションではパフォーマンスの問題を引き起こしていました。

Pervasive PSQL v11 SP3 バージョンのプロバイダーは、このパフォーマンスの問題を克服するよう設計されています。

Pervasive.SQL 2000i OLE DB プロバイダーの機能

このセクションでは、Pervasive.SQL 2000i SP3 リリースの Pervasive OLE DB ドライバーに加えられた変更の概要について説明します。

コマンド ベースのレコードセットのサポート

SP3 より前の Pervasive.SQL 2000i に付属の OLE DB プロバイダーには、SQL ステートメントのサポートが含まれていませんでした。つまり、Commnad オブジェクトがサポートされておらず、結果セットを正常に開くにはテーブル名が必要でした。このバージョンには SQL コマンドのサポートが含まれており、2.5 仕様に適合しています。SQL Server プロバイダーや ODBC ブリッジとは異なり、このプロバイダーはコマンド ベースまたは完全にナビゲーショナルのいずれの結果セットも開くことができます。さらに、いずれの場合もサーバー側のカーソルは、前方のみ、静的または動的とすることができます。コマンド ベースの結果セットとナビゲーショナル(テーブル ベース)結果セットを同時に開き、処理することができます。

コマンド ベースのレコードセットは SQL エンジンのパワーと柔軟性を提供しますが、サーバー側のナビゲーショナル結果セットはインデックスへの直接アクセスを提供します。この機能はコマンド ベースの結果セットでは使用できません(間接アクセスはクエリ オプティマイザーによって提供されます)。インデックスが使用できることにより、Seek オペレーションを実行することができます。Seek を使用するルーチンは、同じ機能を SQL ステートメントを介して実行する同様のルーチンに比べ、非常に効率がよくなっています。適切に使用した場合、特定の値を含むレコードにすばやく位置付けることができ、サーバー側のナビゲーショナル レコード セットは、アプリケーションのパフォーマンスを向上させます。

ADOX

Pervasive PSQL は、データ定義言語およびセキュリティのための ADO 拡張(ADOX)をサポートしています。ADOX はテーブルの作成、スキーマ定義の変更、およびデータベース テーブルの内容表示に使用されます。現在、カタログ、テーブル、列、およびインデックス オブジェクトがサポートされています。テーブルおよびインデックスの作成はサポートされていますが、データベースの作成は現在サポートされていません。

プロバイダーのナビゲーショナル レコードセット

ナビゲーショナル結果セットを開くには、Open メソッドのオプションで adCmdTableDirect を使用する必要があります。以前のバージョンでは、adCmdTable を使ってナビゲーショナル結果セットを開くことができました。しかし、ADO はこれを SQL ステートメントの SELECT * FROM SQL に置き換えます。これは結果セットをコマンドベースにし、インデックスが使用できなくなります。


メモ

ADO はこれを別のものとして扱うため、コマンド サポートが無効の場合にインデックス機能を利用する既存のアプリケーションは、Open メソッド呼び出しで adCmdTableDirect を使用しない限り機能しません。


ラージ バイナリ オブジェクト(BLOB)

ISequentialStream のサポートが OLE DB プロバイダーに追加されました。ADO では、これをレコードセット オブジェクトの AppendChunk/GetChunk 機能に変換します。また、BLOB データとビジュアル コントロールを相互に転送するための複合データ バインディングを行うこともできます。


OLE DB プロバイダーの概要

OLE DB プロバイダーと Visual Studio.NET