IDBSchemaRowsetImpl クラス
スキーマ行セットの実装を提供します。
構文
template <class SessionClass>
class ATL_NO_VTABLE IDBSchemaRowsetImpl : public IDBSchemaRowset
パラメーター
SessionClass
IDBSchemaRowsetImpl
が継承されるクラス。 通常、このクラスは、ユーザーのセッション クラスです。
要件
ヘッダー: atldb.h
メンバー
メソッド
Name | 説明 |
---|---|
CheckRestrictions | スキーマ行セットに対して制限の妥当性をチェックします。 |
CreateSchemaRowset | テンプレート パラメーターで指定されたオブジェクトの COM オブジェクトの作成関数を実装します。 |
SetRestrictions | 特定のスキーマ行セットでサポートする制限を指定します。 |
インターフェイス メソッド
名前 | 説明 |
---|---|
GetRowset | スキーマ行セットを返します。 |
GetSchemas | IDBSchemaRowsetImpl::GetRowsetでアクセスできるスキーマ行セットの一覧を返します。 |
解説
このクラスは、 IDBSchemaRowset インターフェイスと、テンプレート化された作成関数 CreateSchemaRowsetを実装します。
OLE DB はスキーマ行セットを使用して、プロバイダーのデータに関するデータを返します。 このようなデータは、"メタデータ" と呼ばれることがよくあります。"OLE DB プログラマーズ リファレンス" の「IDBSchemaRowset」で説明されているように、既定では、プロバイダーは常に DBSCHEMA_TABLES
、DBSCHEMA_COLUMNS
、DBSCHEMA_PROVIDER_TYPES
をサポートする必要があります。 スキーマ行セットはスキーマ マップで指定します。 スキーマ マップ エントリの詳細については、「 SCHEMA_ENTRY」を参照してください。
ATL オブジェクト ウィザードの OLE DB プロバイダー ウィザードでは、プロジェクトのスキーマ行セットのコードが自動的に生成されます (既定では、ウィザードは前述の必須スキーマ行セットをサポートしています)。ATL オブジェクト ウィザードを使用してコンシューマーを作成すると、ウィザードはスキーマ行セットを使用して適切なデータをプロバイダーにバインドします。 正しいメタデータを提供するようにスキーマ行セットを実装していないと、正しいデータがバインドされません。
プロバイダーでスキーマ行セットをサポートする方法については、「 スキーマ行セットのサポート」を参照してください。
スキーマ行セットの詳細については、 OLE DB プログラマーズ リファレンス の スキーマ行セットに関するセクションを参照してください。
IDBSchemaRowsetImpl::CheckRestrictions
スキーマ行セットに対して制限の妥当性をチェックします。
構文
HRESULT CheckRestrictions(REFGUID rguidSchema,
ULONG cRestrictions, const VARIANT rgRestrictions[]);
パラメーター
rguidSchema
[入力] 要求するスキーマ行セット GUID ( DBSCHEMA_TABLES
など) への参照。
cRestrictions
[入力] コンシューマーがスキーマ行セットに渡した制限の数。
rgRestrictions
[入力] 設定する制限値の長さ cRestrictions の配列。 詳しくは、「SetRestrictions」の rgRestrictions パラメーターの説明をご覧ください。
解説
CheckRestrictions
を使用して、スキーマ行セットに対して制限の妥当性をチェックします。 DBSCHEMA_TABLES
、DBSCHEMA_COLUMNS
、DBSCHEMA_PROVIDER_TYPES
の各スキーマ行セットに対する制限がチェックされます。 これを呼び出して、コンシューマーの IDBSchemaRowset::GetRowset
の呼び出しが正しいかどうかを判断します。 上記以外のスキーマ行セットをサポートする場合は、このタスクを実行する独自の関数を作成する必要があります。
CheckRestrictions
は、コンシューマーが、プロバイダーによってサポートされている正しい制限と正しい制限の種類 (たとえば、文字列の場合は VT_BSTR) を使って GetRowset を呼び出しているかどうかを判断します。 また、正しい制限数がサポートされているかどうかも判断します。 CheckRestrictions
は、既定で SetRestrictions 呼び出しを通じて、任意の行セットについてプロバイダーがサポートしている制限の種類を確認します。 次に、コンシューマーが呼び出した制限とプロバイダーがサポートしている制限を比較することで、処理は成功または失敗します。
スキーマ行セットについて詳しくは、Windows SDK の "OLE DB プログラマーズ リファレンス" の「IDBSchemaRowset」をご覧ください。
IDBSchemaRowsetImpl::CreateSchemaRowset
テンプレート パラメーターで指定されたオブジェクトの COM オブジェクトの作成関数を実装します。
構文
template template <class SchemaRowsetClass>
HRESULT CreateSchemaRowset(IUnknown *pUnkOuter,
ULONG cRestrictions,
const VARIANT rgRestrictions[],
REFIID riid,
ULONG cPropertySets,
DBPROPSET rgPropertySets[],
IUnknown** ppRowset,
SchemaRowsetClass*& pSchemaRowset);
パラメーター
pUnkOuter
[入力] 集約時は外部 IUnknown。それ以外の場合は NULL。
cRestrictions
[入力] スキーマ行セットに適用する制限の数。
rgRestrictions
[入力] 行セットに適用する cRestrictions
VARIANTの配列。
riid
[入力] 出力 IUnknown
での QueryInterface へのインターフェイス。
cPropertySets
[入力] 設定するプロパティ セットの数。
rgPropertySets
[入力] 設定するプロパティを指定する DBPROPSET 構造体の配列。
ppRowset
[出力] riid によって要求された送信 IUnknown
。 この IUnknown
は、スキーマ行セット オブジェクトのインターフェイスです。
pSchemaRowset
[出力] スキーマ行セット クラスのインスタンスへのポインター。 通常、このパラメーターは使用されません。使用できるのは、スキーマ行セットを COM オブジェクトに渡す前に、その行セットで多くの作業を実行する必要があるときです。 pSchemaRowset の有効期間は ppRowset によってバインドされます。
戻り値
標準の HRESULT 値。
解説
この関数は、あらゆる種類のスキーマ行セットに対する汎用作成関数を実装します。 通常、この関数は、ユーザーからは呼び出されません。 これはスキーマ マップの実装によって呼び出されます。
IDBSchemaRowsetImpl::SetRestrictions
特定のスキーマ行セットでサポートする制限を指定します。
構文
void SetRestrictions(ULONG cRestrictions,
GUID* /* rguidSchema */,
ULONG* rgRestrictions);
パラメーター
cRestrictions
[入力] rgRestrictions 配列内の制限の数、および rguidSchema 配列内の GUID の数。
rguidSchema
[入力] 制限をフェッチするスキーマ行セットの GUID の配列。 配列の各要素は、1 つのスキーマ行セットの GUID ( DBSCHEMA_TABLES
など) を保持します。
rgRestrictions
[入力] 設定する制限値の長さ cRestrictions の配列。 各要素は、GUID によって識別されるスキーマ行セットの制限に対応します。 スキーマ行セットがプロバイダーによってサポートされていない場合、その要素は 0 に設定されます。 それ以外の場合、 ULONG 値は、そのスキーマ行セットでサポートされている制限を表すビット マスクを保持します。 特定のスキーマ行セットに対応する制限について詳しくは、Windows SDK の "OLE DB プログラマーズ リファレンス" の「IDBSchemaRowset」にあるスキーマ行セット GUID の表をご覧ください。
解説
IDBSchemaRowset
オブジェクトは SetRestrictions
を呼び出して、特定のスキーマ行セットでサポートする制限を判断します (これは、アップキャストされたポインターを通じて GetSchemas によって呼び出されます)。 制限により、コンシューマーは一致する行だけをフェッチできます (たとえば、テーブル "MyTable" 内のすべての列を検索します)。 制限は省略可能であり、制限がサポートされていない場合 (既定)、常にすべてのデータが返されます。
このメソッドの既定の実装では、rgRestrictions 配列の要素が 0 に設定されます。 既定以外の制限を設定する場合は、セッション クラスで既定値をオーバーライドします。
スキーマ行セットのサポートの実装については、「 スキーマ行セットのサポート」を参照してください。
スキーマ行セットをサポートするプロバイダーの例については、 UpdatePV サンプルを参照してください。
スキーマ行セットについて詳しくは、Windows SDK の "OLE DB プログラマーズ リファレンス" の「IDBSchemaRowset」をご覧ください。
IDBSchemaRowsetImpl::GetRowset
スキーマ行セットを返します。
構文
STDMETHOD (GetRowset)(IUnknown *pUnkOuter,
REFGUID rguidSchema,
ULONG cRestrictions,
const VARIANT rgRestrictions[],
REFIID riid,
ULONG cPropertySets,
DBPROPSET rgPropertySets[],
IUnknown **ppRowset);
パラメーター
pUnkOuter
[入力] 集約時は外部 IUnknown
。それ以外の場合は NULL。
rguidSchema
[入力] 要求するスキーマ行セット GUID ( DBSCHEMA_TABLES
など) への参照。
cRestrictions
[入力] 行セットに適用する制限の数。
rgRestrictions
[入力] 制限を表す cRestrictions
VARIANTの配列。
riid
[入力] 新しく作成されたスキーマ行セットに対して要求する IID。
cPropertySets
[入力] 設定するプロパティ セットの数。
rgPropertySets
[入力/出力] 新しく作成されたスキーマ行セットに対して設定する DBPROPSET 構造体の配列。
ppRowset
[出力] 新しく作成されたスキーマ行セットに対して要求するインターフェイスへのポインター。
解説
このメソッドを使用するには、ユーザーはセッション クラスにスキーマ マップを持っている必要があります。 GetRowset
は、rguidSchema パラメーターがいずれかのマップ エントリの GUID と一致する場合、スキーマ マップ情報を使って、特定の行セット オブジェクトを作成します。 マップ エントリについては、「 SCHEMA_ENTRY 」を参照してください。
Windows SDK の「IDBSchemaRowset::GetRowset」をご覧ください。
IDBSchemaRowsetImpl::GetSchemas
IDBSchemaRowsetImpl::GetRowsetでアクセスできるスキーマ行セットの一覧を返します。
構文
STDMETHOD (GetSchema s )(ULONG * pcSchemas,
GUID ** prgSchemas,
ULONG** prgRest);
パラメーター
pcSchemas
[出力] スキーマの数が格納される ULONG へのポインター。
prgSchemas
[出力] スキーマ行セット GUID の配列へのポインターが格納される GUID の配列へのポインター。
prgRest
[出力] 制限配列が格納される ULONGの配列へのポインター。
解説
このメソッドは、プロバイダーによってサポートされるすべてのスキーマ行セットの配列を返します。 Windows SDK の「IDBSchemaRowset::GetSchemas」をご覧ください。
この関数の実装では、セッション クラスでスキーマ マップを持っている必要があります。 スキーマ マップ情報を使用して、マップ内のスキーマの GUID の配列で応答します。 これは、プロバイダーによってサポートされるスキーマを表します。
関連項目
スキーマ行セット クラスと Typedef クラス
スキーマ行セットのサポート
SCHEMA_ENTRY
UpdatePV