Freigeben über


Abrufen von Metadaten mit Schemarowsets

Möglicherweise müssen Sie Informationen über Anbieter, Rowsets, Tabellen, Spalten oder andere Datenbankinformationen beziehen, ohne dafür das Rowset zu öffnen. Daten mit Angaben über die Datenbankstruktur werden als Metadaten bezeichnet und können mithilfe einer Anzahl verschiedener Methoden abgerufen werden. Die Verwendung von Schemarowsets ist eine dieser Methoden.

OLE DB-Vorlagen bieten eine Reihe von Klassen zum Abrufen von Schemainformationen; Diese Klassen erstellen vordefinierte Schema-Rowsets und werden in Schema Rowset-Klassen und Typedef-Klassen aufgeführt.

Hinweis

Wenn Sie OLAP verwenden und einige der Rowsets nicht von den Schemarowset-Klassen unterstützt werden (wenn Sie z. B. eine variable Spaltenanzahl haben), sollten Sie versuchen, CManualAccessor oder CDynamicAccessor zu verwenden. Sie können durch die Spalten scrollen und case-Anweisungen verwenden, um die möglichen Datentypen für jede einzelne Spalte zu behandeln.

Das Katalog-/Schemamodell

ANSI SQL definiert ein Katalog-/Schemamodell für Datenspeicher. OLE DB verwendet dieses Modell. In diesem Modell verfügen Kataloge (Datenbanken) über Schemas und Schemas mit Tabellen.

  • Katalog A catalog is another name for a database. Es ist eine Sammlung verwandter Schemas. Verwenden Sie CCatalog, um die Kataloge (Datenbanken) auflisten zu können, die zu einer bestimmten Datenquelle gehören. Da viele Datenbanken nur über einen Katalog verfügen, werden Metadaten manchmal als Schemainformationen bezeichnet.

  • Schema A schema is a collection of database objects that are owned or been created by a particular user. Um die Schemas eines bestimmten Benutzers auflisten zu können, verwenden Sie CSchemata.

    In Microsoft SQL Server- und ODBC 2.x-Ausdrücken ist ein Schema ein Besitzer (z. B. dbo ist ein typischer Schemaname). Außerdem speichert SQL Server Metadaten in einer Reihe von Tabellen: Eine Tabelle enthält eine Liste aller Tabellen, und eine andere Tabelle enthält eine Liste aller Spalten. Es gibt kein Äquivalent zu einem Schema in einer Microsoft Access-Datenbank.

  • Tabellentabellen sind Auflistungen von Spalten, die in bestimmten Reihenfolgen angeordnet sind. Verwenden Sie CTables, um die in einem bestimmten Katalog (Datenbank) definierten Tabellen und Informationen zu diesen Tabellen auflisten zu können.

Beschränkungen

Beim Abfragen von Schemainformationen können Sie Einschränkungen verwenden, um den Typ der Informationen anzugeben, an denen Sie interessiert sind. Sie können sich diese Einschränkungen wie einen Filter oder Qualifizierer in einer Abfrage vorstellen. Beispielsweise ist in der Abfrage:

SELECT * FROM authors WHERE l_name = 'pivo'

l_name eine Einschränkung. Dies ist ein einfaches Beispiel mit nur einer Einschränkung; Die Schema rowset-Klassen unterstützen mehrere Einschränkungen.

Die Schema rowset typedef-Klassen kapseln alle OLE DB-Schema-Rowsets, sodass Sie wie jedes andere Rowset auf ein Schema-Rowset zugreifen können, indem Sie es instanziieren und öffnen. Beispielsweise wird die Typedef-Klasse CColumns wie folgt definiert:

CRestrictions<CAccessor<CColumnsInfo>

Die CRestrictions-Klasse liefert die Einschränkungsunterstützung . Nachdem Sie eine Instanz des Schema-Rowsets erstellt haben, rufen Sie CRestrictions::Open auf. Diese Methode gibt auf der Grundlage der von Ihnen angegebenen Einschränkungen ein Resultset zurück.

Informationen zum Angeben von Einschränkungen finden Sie in Anhang B: Schema Rowsets und suchen sie nach dem von Ihnen verwendeten Rowset. Entspricht z CColumns . B. dem COLUMNS-Rowset; in diesem Thema werden die Einschränkungsspalten im ROWS-Rowset aufgelistet: TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME. Sie müssen diese Reihenfolge beim Angeben der Einschränkungen einhalten.

Wenn Sie z. B. nach Tabellennamen einschränken möchten, TABLE_NAME die dritte Einschränkungsspalte ist, und rufen Sie Opendann den namen der gewünschten Tabelle als dritten Einschränkungsparameter an, wie im folgenden Beispiel gezeigt.

So verwenden Sie Schemarowsets

  1. Fügen Sie die Headerdatei Atldbsch.h hinzu (Sie benötigen Atldbcli.h auch Consumersupport).

  2. Instanziieren Sie ein Schemarowsetobjekt in der Consumer- oder Dokumentheaderdatei. Wenn Sie Tabelleninformationen benötigen, deklarieren Sie ein CTables Objekt. Wenn Sie Spalteninformationen benötigen, deklarieren Sie ein CColumns Objekt. In diesem Beispiel wird veranschaulicht, wie die Spalten der Tabelle „Authors“ abgerufen werden können:

    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. Greifen Sie zum Abrufen der Informationen auf den entsprechenden Datenmember des Schemarowsetobjekts zu (z. B. ColumnSchemaRowset.m_szColumnName). Dieses Datenelement entspricht COLUMN_NAME. Informationen dazu, welche OLE DB-Spalte jedem Datenelement entspricht, finden Sie unter "CColumns".

Für den Verweis auf das Schema-Rowset, typedef-Klassen, die in den OLE DB-Vorlagen bereitgestellt werden (siehe Schema Rowset Classes and Typedef Classes).

Weitere Informationen zu OLE DB-Schema-Rowsets, einschließlich Einschränkungsspalten, finden Sie in Anhang B: Schema Rowsets in der OLE DB-Programmierreferenz.

Komplexere Beispiele für die Verwendung von Schema rowset-Klassen finden Sie in den CatDB - und DBViewer-Beispielen .

Informationen zur Anbieterunterstützung für Schema-Rowsets finden Sie unter Unterstützen von Schema-Rowsets.

Siehe auch

Verwenden von Zugriffsmethoden