Sdílet prostřednictvím


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

  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).

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.

Viz také

Koncepty

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