Sdílet prostřednictvím


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

  1. Je nutné zahrnout soubor hlaviček Atldbsch.h (samozřejmě potřebujete také Atldbcli.h pro podporu příjemce).

  2. 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();
    }
    
  3. 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.

Viz také

Koncepty

Použití přístupových objektů