Abrufen von Metadaten mit Schemarowsets
Aktualisiert: November 2007
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 Anzahl von Klassen zum Abrufen von Schemainformationen. Diese Klassen erstellen vordefinierte Schemarowsets und sind in Die Klassen "Schemarowset" und "Typedef" aufgelistet.
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 einen Bildlauf durch die Spalten durchführen 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 enthalten Kataloge (Datenbanken) Schemas, und Schemas enthalten Tabellen.
Katalog Katalog ist eine andere Bezeichnung für eine Datenbank. Kataloge sind Auflistungen von verwandten Schemas. Verwenden Sie CCatalog zum Auflisten der Kataloge (Datenbanken), die zu einer bestimmten Datenquelle gehören. Da viele Datenbanken nur einen Katalog besitzen, werden Metadaten manchmal einfach als Schemainformationen bezeichnet.
Schema Ein Schema ist eine Auflistung von Datenbankobjekten, die im Besitz eines bestimmten Benutzers sind oder von diesem erstellt wurden. Um alle im Besitz eines bestimmten Benutzers befindlichen Schemas aufzulisten, verwenden Sie CSchemata.
Aus der Sicht von Microsoft SQL Server und ODBC 2.x stellt ein Schema einen Besitzer dar (dbo ist beispielsweise ein typischer Schemaname). Darüber hinaus speichert SQL Server Metadaten in einer Tabellengruppe: Eine Tabelle enthält eine Liste aller Tabellen, und eine weitere Tabelle enthält einer Liste aller Spalten. In einer Microsoft Access -Datenbank gibt es kein Äquivalent zu einem Schema.
Tabelle Tabellen sind Auflistungen von Spalten, die in einer bestimmten Reihenfolge geordnet sind. Um alle in einem bestimmten Katalog (einer bestimmten Datenbank) definierten Tabellen sowie Informationen über diese Tabellen aufzulisten, verwenden Sie CTables).
Beschränkungen
Wenn Sie eine Abfrage nach Schemainformationen durchführen, können Sie Beschränkungen verwenden, um den gewünschten Informationstyp genauer anzugeben. Sie können sich diese Beschrä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 Beschränkung. Dies ist ein sehr einfaches Beispiel mit nur einer Beschränkung. Die Schemarowsetklassen unterstützen mehrere Beschränkungen.
Die Klassen "Schemarowset" und "Typedef" kapseln alle OLE DB-Schemarowsets ein. So können Sie auf ein Schemarowset wie auf ein beliebiges anderes Rowset zugreifen, indem Sie es instanziieren und öffnen. Die typedef-Klasse CColumns ist beispielsweise definiert als:
CRestrictions<CAccessor<CColumnsInfo>
Die CRestrictions-Klasse enthält die Unterstützung für die Beschränkung. Rufen Sie nach dem Erstellen einer Instanz des Schemarowsets CRestrictions::Open auf. Diese Methode gibt auf der Grundlage der von Ihnen angegebenen Beschränkungen ein Resultset zurück.
Nähere Informationen zum Bestimmen der Beschränkungen finden Sie im Anhang B: Schemarowsets. Suchen Sie nach dem von Ihnen verwendeten Rowset. CColumns entspricht beispielsweise dem COLUMNS-Rowset. In diesem Thema werden die Beschränkungsspalten im COLUMNS-Rowset aufgelistet: TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME. Sie müssen diese Reihenfolge beim Bestimmen der Beschränkungen einhalten.
Wenn Sie also beispielsweise eine Beschränkung nach Tabellennamen vornehmen möchten, müssen Sie beachten, dass TABLE_NAME die dritte Beschränkungsspalte ist. Rufen Sie anschließend Open auf, und geben Sie den gewünschten Tabellennamen als dritten Beschränkungsparameter an, wie im folgenden Beispiel demonstriert.
So verwenden Sie Schemarowsets
Sie müssen die Headerdatei Atldbsch.h einfügen. (Natürlich benötigen Sie auch Atldbcli.h für die Consumerunterstützung.)
Instanziieren Sie ein Schemarowsetobjekt in der Consumer- oder Dokumentheaderdatei. Wenn Sie Tabelleninformationen abrufen möchten, deklarieren Sie ein CTables-Objekt. Wenn Sie Spalteninformationen abrufen möchten, deklarieren Sie ein CColumns-Objekt. In diesem Beispiel wird demonstriert, wie die Spalten der Tabelle Authors abgerufen werden können:
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(); }
Greifen Sie zum Abrufen der Informationen auf den entsprechenden Datenmember des Schemarowsetobjekts zu (z. B. ColumnSchemaRowset.m_szColumnName). Dies entspricht COLUMN_NAME. Welche OLE DB-Spalte welchem Datenmember entspricht, können Sie unter CColumns nachlesen.
Informationen zur Referenz der in den OLE DB-Vorlagen enthaltenen Schemarowset-Klassen und typedef-Klassen finden Sie unter Die Klassen "Schemarowset" und "Typedef".
Weitere Informationen zu OLE DB-Schemarowsets, einschließlich der Beschränkungsspalten, finden Sie unter Anhang B: Schemarowsets in der OLE DB-Programmierreferenz.
Unter CatDB und DBViewer finden Sie komplexere Beispiele zur Verwendung von Schemarowset-Klassen.
Informationen über Anbieterunterstützung für Schemarowsets finden Sie unter Unterstützen von Schemarowsets.