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ých databázových informacích bez otevření sady řádků. Data o struktuře databáze se nazývají metadata a lze je načíst několika různými metodami. Jednou z metod je použití sad řádků schématu.

Šablony OLE DB poskytují sadu tříd pro načtení informací o schématu; tyto třídy vytvářejí předdefinované sady řádků schématu a jsou uvedeny v třídách sady řádků schématu a typedef třídy.

Poznámka:

Pokud používáte OLAP a některé sady řádků nejsou podporovány třídami sady řádků schématu (například máte proměnný počet sloupců), měli byste zvážit použití CManualAccessor nebo CDynamicAccessor. Můžete procházet sloupce a používat příkazy case pro zpracování možných datových typů pro každý sloupec.

Katalog/ model schématu

ANSI SQL definuje model katalogu/schématu pro úložiště dat; OLE DB používá tento model. V tomto modelu mají katalogy (databáze) schémata a schémata tabulky.

  • Katalog Katalog A je jiný název databáze. Jedná se o kolekci souvisejících schémat. Chcete-li zobrazit seznam katalogů (databází) patřících danému zdroji dat, použijte CCatalog. Protože mnoho databází má pouze jeden katalog, metadata se někdy označují jako informace o schématu.

  • Schéma A schéma je kolekce databázových objektů, které vlastní nebo byly vytvořeny konkrétním uživatelem. Pokud chcete zobrazit seznam schémat vlastněných daným uživatelem, použijte CSchemata.

    V termínech Microsoft SQL Server a ODBC 2.x je schéma vlastníkem (například dbo je typický název schématu). SQL Server také ukládá metadata do sady tabulek: jedna tabulka obsahuje seznam všech tabulek a jiná tabulka obsahuje seznam všech sloupců. V databázi Microsoft Accessu neexistuje žádný ekvivalent schématu.

  • Tabulky jsou kolekce sloupců uspořádaných v konkrétních objednávkách. Pokud chcete zobrazit seznam tabulek definovaných v daném katalogu (databázi) a informace o těchto tabulkách, použijte tabulky CTables.

Omezení

Při dotazování na informace o schématu můžete pomocí omezení určit typ informací, které vás zajímají. Omezení si můžete 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 jednoduchý příklad s pouze jedním omezením; třídy sady řádků schématu podporují několik omezení.

Třídy typedef sady řádků schématu zapouzdřují všechny sady řádků schématu OLE DB tak, abyste měli přístup ke sadě řádků schématu stejně jako všechny ostatní sady řádků vytvořením instance a otevřením. Například typedef třída CColumns je definována takto:

CRestrictions<CAccessor<CColumnsInfo>

Třída CRestrictions poskytuje podporu omezení. Po vytvoření instance sady řádků schématu zavolejte CRestrictions::Open. Tato metoda vrátí sadu výsledků na základě vámi zadaných omezení.

Pokud chcete určit omezení, přečtěte si přílohu B: Sady řádků schématu a vyhledejte sadu řádků, kterou používáte. Například CColumns odpovídá sadě řádků SLOUPCŮ; toto téma uvádí sloupce omezení v sadě řádků SLOUPCŮ: TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME. Toto pořadí musíte dodržovat při zadávání vašich omezení.

Pokud tedy například chcete omezit název tabulky, TABLE_NAME je třetí sloupec omezení a potom zavolat Open, zadat požadovaný název tabulky jako třetí parametr omezení, jak je znázorněno v následujícím příkladu.

Použití sad řádků schématu

  1. Zahrňte hlavičkový soubor Atldbsch.h (potřebujete Atldbcli.h také podporu uživatelů).

  2. Vytvořte instanci objektu sady řádků schématu v souboru hlavičky příjemce nebo dokumentu. Pokud chcete informace o tabulce, deklarujte objekt. Pokud chcete informace o sloupci, deklarujte CTables CColumns objekt. Tento příklad ukazuje, jak načíst sloupce v tabulce autorů:

    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();
    }
    
  3. Chcete-li načíst informace, přejděte k příslušnému datovému členu objektu sady řádků schématu, ColumnSchemaRowset.m_szColumnNamenapříklad . Tento datový člen odpovídá COLUMN_NAME. Pokud chcete zjistit, který sloupec OLE DB odpovídá každému datovému členu, přečtěte si článek CColumns.

Odkaz na sadu řádků schématu zadejte třídy typedef poskytované v šablonách OLE DB (viz třídy sady řádků schématu a třídy Typedef).

Další informace o sadách řádků schématu OLE DB, včetně sloupců omezení, naleznete v dodatku B: Sady řádků schématu v odkazech programátora OLE DB.

Složitější příklady použití tříd sady řádků schématu najdete v ukázkách CatDB a DBViewer .

Informace o podpoře zprostředkovatele pro sady řádků schématu naleznete v tématu Podpora sad řádků schématu.

Viz také

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