Share via


IDBSchemaRowsetImpl 类

提供架构行集的实现。

语法

template <class SessionClass>
class ATL_NO_VTABLE IDBSchemaRowsetImpl : public IDBSchemaRowset

参数

SessionClass
继承 IDBSchemaRowsetImpl 的类。 通常情况下,此类将是用户的会话类。

要求

标头: atldb.h

成员

方法

名称 描述
CheckRestrictions 检查针对架构行集的限制的有效性。
CreateSchemaRowset 对模板参数指定的对象实现 COM 对象创建程序函数。
SetRestrictions 指定在特定架构行集上支持哪些限制。

接口方法

名称 描述
GetRowset 返回架构行集。
GetSchemas 返回可由 IDBSchemaRowsetImpl::GetRowset访问的架构行集的列表。

备注

此类实现 IDBSchemaRowset 接口和模板化创建程序函数 CreateSchemaRowset

OLE DB 使用架构行集返回与提供程序中的数据有关的数据。 此类数据通常称为“元数据”。默认情况下,提供程序必须始终支持 DBSCHEMA_TABLESDBSCHEMA_COLUMNSDBSCHEMA_PROVIDER_TYPES,如“OLE DB 程序员参考”中的 IDBSchemaRowset 所述。 架构行集在架构映射中指定。 有关架构映射项的信息,请参阅 SCHEMA_ENTRY

ATL 对象向导中的 OLE DB 提供程序向导自动生成项目中的架构行集的代码。 (默认情况下,向导支持前文提到的必需架构行集。)使用 ATL 对象向导创建使用者时,向导使用架构行集将正确的数据绑定到提供程序。 如果未实现架构行集来提供正确的元数据,向导将不会绑定正确的数据。

有关如何支持提供程序中的架构行集的信息,请参阅 支持架构行集

有关架构行集的详细信息,请参阅 OLE DB 程序员参考 中的 架构行集

IDBSchemaRowsetImpl::CheckRestrictions

检查针对架构行集的限制的有效性。

语法

HRESULT CheckRestrictions(REFGUID rguidSchema,
   ULONG cRestrictions,  const VARIANT rgRestrictions[]);

参数

rguidSchema
[in] 对所请求架构行集 GUID(例如, DBSCHEMA_TABLES)的引用。

cRestrictions
[in] 使用者为架构行集传入的限制数目。

rgRestrictions
[in] 要设置的限制值的长度 cRestrictions 数组。 有关详细信息,请参阅 SetRestrictions 中的 rgRestrictions 参数描述。

备注

使用 CheckRestrictions 可对架构行集检查限制的有效性。 它会检查对 DBSCHEMA_TABLESDBSCHEMA_COLUMNSDBSCHEMA_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
[in] 聚合时为外部 IUnknown,否则为 NULL。

cRestrictions
[in] 要应用于架构行集的限制的计数。

rgRestrictions
[in] 要应用于行集的 cRestrictions VARIANT 数组。

riid
[in] 输出 IUnknownQueryInterface 的接口。

cPropertySets
[in] 要设置的属性集数目。

rgPropertySets
[in] 指定要设置的属性的 DBPROPSET 结构的数组。

ppRowset
[out] riid 请求的传出 IUnknownIUnknown 是架构行集对象上的接口。

pSchemaRowset
[out] 指向架构行集类的实例的指针。 通常不使用此参数,但如果你在将架构行集交给 COM 对象前必须在其上进行较多工作,则可使用此参数。 pSchemaRowset 的生存期受到 ppRowset 约束。

返回值

标准 HRESULT 值。

备注

此函数对所有类型的架构行集实现泛型创建程序。 通常情况下,用户不调用此函数。 它由架构映射的实现调用。

IDBSchemaRowsetImpl::SetRestrictions

指定在特定架构行集上支持哪些限制。

语法

void SetRestrictions(ULONG cRestrictions,
   GUID* /* rguidSchema */,
   ULONG* rgRestrictions);

参数

cRestrictions
[in] rgRestrictions 数组中的限制数目和 rguidSchema 数组中的 GUID 数目。

rguidSchema
[in] 要为其提取限制的架构行集的 GUID 数组。 每个数组元素均包含一个架构行集的 GUID(例如, DBSCHEMA_TABLES)。

rgRestrictions
[in] 要设置的限制值的长度 cRestrictions 数组。 各元素对应于由 GUID 标识的架构行集上的限制。 如果某个架构行集不受提供程序支持,则该元素设置为零。 否则, 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
[in] 聚合时为外部 IUnknown;否则为 NULL。

rguidSchema
[in] 对所请求架构行集 GUID(例如, DBSCHEMA_TABLES)的引用。

cRestrictions
[in] 要应用于行集的限制计数。

rgRestrictions
[in] 一个表示限制的 cRestrictionsVARIANT数组。

riid
[in] 新建架构行集请求的 IID。

cPropertySets
[in] 要设置的属性集数目。

rgPropertySets
[in/out] 要在新建架构行集上设置的 DBPROPSET 结构数组。

ppRowset
[out] 一个指针,指向新建架构行集上所请求的接口。

备注

此方法要求用户在会话类中有架构映射。 利用架构映射信息,GetRowset 可在 rguidSchema 参数等于其中一个映射条目 GUID 时创建给定行集对象。 有关映射条目的描述,请参阅 SCHEMA_ENTRY

请参阅 Windows SDK 中的 IDBSchemaRowset::GetRowset

IDBSchemaRowsetImpl::GetSchemas

返回可由 IDBSchemaRowsetImpl::GetRowset访问的架构行集的列表。

语法

STDMETHOD (GetSchema s )(ULONG * pcSchemas,
   GUID ** prgSchemas,
   ULONG** prgRest);

参数

pcSchemas
[out] 一个指针,指向使用架构数目填充的 ULONG

prgSchemas
[out] 一个指向 GUID 数组的指针,该数组用指向架构行集 GUID 数组的指针填充。

prgRest
[out] 一个指针,指向要使用限制数组填充的 ULONG数组。

备注

此方法返回提供程序支持的所有架构行集的数组。 请参阅 Windows SDK 中的 IDBSchemaRowset::GetSchemas

若要实现此函数,用户在会话类中必须有架构映射。 然后,该函数会利用架构映射信息,使用映射中架构的 GUID 数组进行响应。 这表示提供程序支持的架构。

另请参阅

架构行集类和 Typedef 类
支持架构行集
SCHEMA_ENTRY
UpdatePV