IDBSchemaRowsetImpl 類別
提供結構描述資料列集的實作。
語法
template <class SessionClass>
class ATL_NO_VTABLE IDBSchemaRowsetImpl : public IDBSchemaRowset
參數
SessionClass
繼承自 IDBSchemaRowsetImpl
的類別。 一般而言,此類別會是使用者的工作階段類別。
需求
Header: atldb.h
成員
方法
名稱 | 描述 |
---|---|
CheckRestrictions | 針對結構描述資料列集檢查限制的有效性。 |
CreateSchemaRowset | 為範本參數所指定的物件實作 COM 物件建立者函式。 |
SetRestrictions | 指定您在特定結構描述資料列集上支援的限制。 |
介面方法
名稱 | 描述 |
---|---|
GetRowset | 傳回結構描述資料列集。 |
GetSchemas | 傳回 IDBSchemaRowsetImpl::GetRowset可存取的結構描述資料列集清單。 |
備註
此類別實作 IDBSchemaRowset 介面和範本化的建立者函式 CreateSchemaRowset。
OLE DB 使用結構描述資料列集,傳回提供者內部資料的相關資料。 這類數據通常稱為「元數據」。根據預設,提供者必須一律支援DBSCHEMA_TABLES
、 DBSCHEMA_COLUMNS
和 DBSCHEMA_PROVIDER_TYPES
,如 OLE DB 程式設計人員參考中的 IDBSchemaRowset 中所述。 結構描述資料列集是在結構描述對應中指定。 如需結構描述對應項目的資訊,請參閱 SCHEMA_ENTRY。
[ATL 物件精靈] 中的 [OLE DB 提供者精靈] 會自動為您專案中的結構描述資料列集產生程式碼 (根據預設,精靈支援先前提及的強制架構數據列集。當您使用 ATL 物件精靈建立取用者時,精靈會使用架構數據列集將正確的數據系結至提供者。 如果您未實作結構描述資料列集以提供正確的中繼資料,此精靈將不會繫結正確的資料。
如需如何在提供者內支援結構描述資料列集的資訊,請參閱 支援結構描述資料列集。
如需結構描述資料列集的詳細資訊,請參閱<OLE DB 程式設計人員參考> 中的 Schema Rowsets(結構描述資料列集)。
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_COLUMNS
和 DBSCHEMA_PROVIDER_TYPES
架構數據列集的限制DBSCHEMA_TABLES
。 呼叫它以判斷取用者的呼叫 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]輸出上的IUnknown
QueryInterface介面。
cPropertySets
[in] 要設定的屬性集數目。
rgPropertySets
[in] 指定要設定之屬性的 DBPROPSET 結構陣列。
ppRowset
[out]riid 所要求的傳出IUnknown
。 這是 IUnknown
架構數據列集物件上的介面。
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] 代表限制的 cRestrictions
VARIANT陣列。
riid
[in] 新建立之結構描述資料列集的要求 IID。
cPropertySets
[in] 要設定的屬性集數目。
rgPropertySets
[in/out] 要在新建立的結構描述資料列集上設定的 DBPROPSET 結構陣列。
ppRowset
[out] 新建立之結構描述資料列集上所要求的介面指標。
備註
此方法需要使用者具有工作階段類別中的結構描述對應。 使用架構對應資訊,如果 rguidSchema 參數等於其中一個對應專案 GUID,GetRowset
就會建立指定的數據列集物件。 如需對應項目的說明,請參閱 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 陣列來回應。 這會是提供者支援的結構描述。