OLE DB 準拠合致テスト
プロバイダーの一貫性を高めるために、Data Access SDK には一連の OLE DB 準拠テストが用意されています。 このテストでは、プロバイダーのあらゆる側面を確認し、プロバイダーが期待どおりに機能することを合理的に保証します。 OLE DB 準拠テストは、Microsoft Data Access SDK にあります。 このセクションでは、準拠テストに合格するために実行すべきことを中心に説明します。 OLE DB 準拠テストの実行については、SDK を参照してください。
準拠テストの実行
Visual C++ 6.0 では、値とプロパティを確認するための多数のフック関数が OLE DB プロバイダー テンプレートに追加されました。 これらの関数のほとんどは、準拠テストに応じて追加されました。
Note
プロバイダーが OLE DB 準拠テストに合格するには、いくつかの検証関数を追加する必要があります。
このプロバイダーには 2 つの検証ルーチンが必要です。 1 つ目のルーチン CRowsetImpl::ValidateCommandID
は、行セット クラスの一部です。 これは、プロバイダー テンプレートによる行セットの作成時に呼び出されます。 このサンプルでは、このルーチンを使い、インデックスをサポートしないことをコンシューマーに伝えます。 1 つ目の呼び出しは CRowsetImpl::ValidateCommandID
に対して行います (このプロバイダーは、「プロバイダーのブックマーク サポート」で CCustomRowset
のためにインターフェイス マップに追加した _RowsetBaseClass
typedef を使うので、テンプレート引数の長い行を入力する必要はないことに注意してください)。 次に、index パラメーターが NULL でない場合は DB_E_NOINDEX を返します (これは、コンシューマーがこちら側のインデックスを使いたいことを示しています)。 コマンド ID の詳細については、OLE DB 仕様を参照し、IOpenRowset::OpenRowset
を検索してください。
次のコードは ValidateCommandID
の検証ルーチンです。
/////////////////////////////////////////////////////////////////////
// CustomRS.H
// Class: CCustomRowset
HRESULT ValidateCommandID(DBID* pTableID, DBID* pIndexID)
{
HRESULT hr = _RowsetBaseClass::ValidateCommandID(pTableID, pIndexID);
if (hr != S_OK)
return hr;
if (pIndexID != NULL)
return DB_E_NOINDEX; // Doesn't support indexes
return S_OK;
}
誰かが DBPROPSET_ROWSET グループのプロパティを変更するたびに、プロバイダー テンプレートから OnPropertyChanged
メソッドが呼び出されます。 他のグループのプロパティを処理する場合は、適切なオブジェクトに追加します (つまり、DBPROPSET_SESSION のチェックは CCustomSession
クラスに含めます)。
このコードでは、まずプロパティが他のプロパティとリンクしているかどうかを確認します。 プロパティがチェーンされている場合は、DBPROP_BOOKMARKS プロパティを True
に設定します。 OLE DB 仕様の付録 C には、プロパティに関する情報が記載されています。 この情報を確認すると、プロパティが他のプロパティにチェーンされているかどうかについてもわかります。
また、IsValidValue
ルーチンをコードに追加することもできます。 プロパティを設定しようとすると、テンプレートによって IsValidValue
が呼び出されます。 プロパティ値を設定するときに追加の処理が必要な場合は、このメソッドをオーバーライドします。 各プロパティ セットに対して、これらのメソッドのいずれかを使用できます。