使用結構描述資料列集取得中繼資料
有時候您需要在未開啟資料列集的情況下取得提供者、資料列集、資料表、資料行或其他資料庫資訊的相關資訊。 有關資料庫結構的資料稱為中繼資料,並且可以由許多不同的方法擷取。 其中一個方法是使用結構描述資料列集。
OLE DB 範本提供一組類別來擷取架構資訊;這些類別會建立預先定義的架構數據列集,並列在架構數據列集類別和 Typedef 類別中。
注意
如果您是使用 OLAP,而且結構描述資料列集類別不支援您的一些資料列集 (例如,您具有變動的資料行數目),則您應該考慮使用 CManualAccessor
或 CDynamicAccessor
。 您可以捲動資料行,並使用 case 陳述式來處理每個資料行的可能資料型別。
目錄/結構描述模型
ANSI SQL 會定義資料存放區的目錄/結構描述模型。OLE DB 會使用此模型。 在此模型中,目錄(資料庫)具有架構,且架構具有數據表。
目錄 是資料庫的另一個名稱。 它是相關架構的集合。 若要列出屬於指定數據源的目錄(資料庫),請使用 CCatalog。 因為許多資料庫只有一個目錄,所以元數據有時稱為架構資訊。
架構架構架構 是特定使用者所擁有或已建立的資料庫物件集合。 若要列出指定使用者所擁有的架構,請使用 CSchemata。
Microsoft SQL Server 和 ODBC 2.x 詞彙中,架構是擁有者(例如 dbo 是典型的架構名稱)。 此外,SQL Server 會將元資料儲存在一組數據表中:一個數據表包含所有數據表的清單,另一個數據表則包含所有數據行的清單。 Microsoft Access 資料庫中的架構不相等。
數據表 是依特定順序排列的數據行集合。 若要列出指定目錄中定義的數據表(資料庫),以及這些數據表的相關信息,請使用 CTables。
限制
當您查詢架構資訊時,您可以使用限制來指定您感興趣的資訊類型。 您可以將限制想成查詢中的篩選條件或限定詞。 例如,在查詢中:
SELECT * FROM authors WHERE l_name = 'pivo'
l_name
是限制。 這是一個簡單的範例,只有一個限制:架構數據列集類別支援數個限制。
架構數據 列集 typedef 類別會 封裝所有 OLE DB 架構數據列集,讓您可以藉由具現化和開啟它來存取架構數據列集,就像任何其他數據列集一樣。 例如,typedef 類別 CColumns 定義為:
CRestrictions<CAccessor<CColumnsInfo>
CRestrictions 類別提供限制支援。 建立架構數據列集的實例之後,請呼叫 CRestrictions::Open。 這個方法會根據您指定的限制傳回結果集。
若要指定限制,請參閱 附錄 B:架構數據列集 ,並查閱您使用的數據列集。 例如, CColumns
對應至 COLUMNS 數據列集;該主題會列出 COLUMNS 數據列集中的限制數據行:TABLE_CATALOG、TABLE_SCHEMA、TABLE_NAME、COLUMN_NAME。 您必須依照該順序指定您的限制。
例如,如果您想要依數據表名稱限制,TABLE_NAME是第三個限制數據行,然後呼叫 Open
,將想要的數據表名稱指定為第三個限制參數,如下列範例所示。
若要使用結構描述資料列集
包含標頭檔案
Atldbsch.h
(您Atldbcli.h
也需要取用者支援)。具現化消費者或文件標頭檔中的結構描述資料列集物件。 如果您想要數據表資訊,請宣告
CTables
物件;如果您想要數據行資訊,請宣告CColumns
物件。 此範例顯示如何擷取 authors 資料表中的資料行:CDataSource ds; ds.Open(); CSession ss; ss.Open(ds); CColumns columnSchemaRowset; // TABLE_NAME is the third restriction column, so // specify "authors" as the third restriction parameter: HRESULT hr = columnSchemaRowset.Open(ss, NULL, NULL, L"authors"); hr = columnSchemaRowset.MoveFirst(); while (hr == S_OK) { hr = columnSchemaRowset.MoveNext(); }
若要擷取資訊,請存取結構描述資料列集物件的適當資料成員,例如
ColumnSchemaRowset.m_szColumnName
。 此數據成員會對應至COLUMN_NAME。 若要查看每個數據成員對應的 OLE DB 資料行,請參閱 CColumns。
如需架構數據列集的參考,OLE DB 範本中提供的 typedef 類別(請參閱 架構數據列集類別和 Typedef 類別)。
如需 OLE DB 架構資料列集的詳細資訊,包括限制數據行,請參閱附錄 B:OLE DB 程式設計人員參考中的架構數據列集。
如需如何使用架構數據列集類別的更複雜範例,請參閱 CatDB 和 DBViewer 範例。
如需架構數據列集提供者支援的相關信息,請參閱 支援架構數據列集。