Získávání metadat pomocí sad řádků schématu
Někdy potřebujete získat informace o poskytovateli, sadě řádků, tabulce, sloupcích nebo jiné informace databáze bez otevření sady řádků.Údaje o struktuře databáze se nazývají metadata a mohou být načteny řadou různých metod.Jednou metodou je použití sad řádků schématu.
Šablony OLE DB poskytují sadu tříd pro načtení informací o schématu; tyto třídy vytvoří předdefinované sady řádků schématu a jsou uvedeny v Třídy sady řádků schématu a třídy typedef.
[!POZNÁMKA]
Pokud používáte technologii OLAP a některé z vašich sad řádků nejsou podporovány třídami sad řádků schématu (například máte proměnlivý počet sloupců), měli byste zvážit použití CManualAccessor nebo CDynamicAccessor.Můžete procházet sloupci a pomocí příkazu case zpracovávat všechny možné datové typy jednotlivých sloupců.
Model katalog/schéma
ANSI SQL definuje model katalog/schéma pro úložiště dat; technologie OLE DB tento model používá.V tomto modelu obsahují katalogy (databáze) schémata a schémata obsahují tabulky.
Katalog Katalog je jiný název pro databázi.Je to kolekce souvisejících schémat.Pro procházení katalogy (databázemi) patřícími do daného zdroje dat použijte CCatalog.Vzhledem k tomu, že mnoho databází má pouze jeden katalog, metadata jsou někdy jednoduše nazývána informacemi o schématu.
Schéma Schéma je kolekce objektů databáze, které jsou vlastněny nebo byly vytvořeny konkrétním uživatelem.Pro seznam schémat, vlastněných daným uživatelem, použijte CSchemata.
V podmínkách Microsoft SQL Server a ODBC 2.x je schéma vlastníkem (typickým názvem schématu je například dbo).Navíc SQL Server ukládá metadata do sady tabulek: jedna tabulka obsahuje seznam všech tabulek a jiná tabulka obsahuje seznam všech sloupců.Neexistuje žádný ekvivalent schématu v databázi Microsoft Access.
Table Tabulky jsou kolekce sloupců, které jsou uspořádány v určitých pořadích.Pro seznam tabulek, definovaných v daném katalogu (databázi), a informace o těchto tabulkách, použijte CTables).
Omezení
Při dotazování na informace o schématu můžete použít omezení pro určení typu informací, o které máte zájem.Omezení si lze představit jako filtr nebo kvalifikátor v dotazu.Například v dotazu:
SELECT * FROM authors where l_name = 'pivo'
l_name je omezení.Toto je velmi jednoduchý příklad pouze s jediným omezením; třídy sad řádků schématu podporují několik omezení.
Třídy typedef sad řádků schématu zapouzdřují všechny sady řádků schématu OLE DB, abyste mohli přistupovat k sadě řádků schématu stejně jako k jakékoli jiné sadě řádků pomocí vytvoření instance a otevření.Například třída typedef CColumns je definována jako:
CRestrictions<CAccessor<CColumnsInfo>
Třída CRestrictions poskytuje podporu omezení.Po vytvoření instance sady řádků schématu zavolejte CRestrictions::Open.Tato metoda vrací sadu výsledků na základě omezení, které zadáte.
Pro určení omezení si přečtěte na Sady řádků schématu Dodatek B: a vyhledejte sadu řádků, kterou používáte.Například CColumns odpovídá Sloupce sady řádků; Toto téma uvádí sloupce omezení v sadě řádků COLUMNS: TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, Název_sloupce.Je nutné následovat toto pořadí v určování vašich omezení.
Takže například pokud chcete omezit podle názvu tabulky, všimněte si, že TABLE_NAME je třetím sloupcem omezení, a potom volejte Open s určením požadovaného názvu tabulky jako třetí parametr omezení, jak je znázorněno v následujícím příkladu.
Pro použití sad řádků schématu
Je nutné zahrnout soubor hlaviček Atldbsch.h (samozřejmě potřebujete také Atldbcli.h pro podporu příjemce).
Vytvořte instanci objektu sady řádků schématu v souboru hlaviček příjemce nebo dokumentu.Pokud chcete informace o tabulce, deklarujte objekt CTables; pokud chcete informace o sloupci, deklarujte objekt CColumns.Tento příklad ukazuje, jak načíst sloupce v tabulce authors:
CDataSource ds; ds.Open(); CSession ss; ss.Open(); CColumns ColumnSchemaRowset; // TABLE_NAME is the third restriction column, so // specify "authors" as the third restriction parameter: hr = ColumnSchemaRowset.Open(ss, NULL, NULL, "authors"); hr = ColumnSchemaRowset.MoveFirst(); while (hr == S_OK) { hr = ColumnSchemaRowset.MoveNext(); }
Pro načtení informací přistupujte k příslušnému datovému členu objektu sady řádků schématu, například ColumnSchemaRowset.m_szColumnName.To odpovídá COLUMN_NAME.Pro zjištění, který datový člen sloupce OLE DB odpovídá čemu si prohlédněte CColumns.
Pro reference sady řádků schématu, třídy typedef poskytované v šablonách OLE DB (si prohlédněte Třídy sady řádků schématu a třídy typedef).
Další informace o sadách řádků schématu OLE DB, včetně sloupců omezení, viz Sady řádků schématu Dodatek B: v OLE DB Programmer's Reference.
Pro složitější příklady použití tříd sady řádků schématu si prohlédněte ukázky CatDB a DBViewer.
Pro informace o podpoře poskytovatele pro sady řádků schématu si prohlédněte Podpora sad řádků schématu.