Získávání metadat se sadami řá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). SQL Server navíc 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 Dodatek B: Sady řádků schématu a vyhledejte sadu řádků, kterou používáte. Například CColumns odpovídá Sada řádků COLUMNS; toto téma uvádí sloupce omezení v sadě řádků COLUMNS: TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME. 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).
Pro další informace o sadách řádků schématu OLE DB, včetně sloupců omezení, si prohlédněte Dodatek B: Sady řádků schématu 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.