Schema Discovery API (SDA)

Eintrag zuletzt aktualisiert am: 10.02.2005

ADO.NET 2.0 erlaubt im Gegensatz zu Version 1.x, das Schema einer Datenbank zu erforschen. Dieser Teil von ADO.NET wird auch als Schema Discovery API bezeichnet.

Ausführlicher Text

Schema-API
Das neue Schema-API von ADO.NET 2.0 besteht aus einem einzigen Befehl. GetSchema() ruft Schema-Informationen von einer Datenbank in Form eines DataTable-Objekts ab. GetSchema() erwartet eine Zeichenkette, die die Menge der zu übermittelnden Informationen angibt. Ein zweiter Parameter in Form eines Zeichenketten-Array erlaubt die Angabe eines Filters.
Dabei gibt es fünf allgemeine Menge, die durch die Konstantenliste System.Data.Common.DbMetaDataCollectionNames festgelegt ist:
  • MetaDataCollections: Eine Liste der verfügbaren Mengen (z.B. "Tables", "Views", "Users", etc.)
  • Restrictions: Eine Liste der verfügbaren Filter.
  • DataSourceInformation: Informationen zur Datenbankinstanz, auf die der Datenprovider verweist
  • DataTypes: Informationen über von der Datenbank unterstützen Datentypen
  • ReservedWords: Liste aller reservierten Worte der Datenbanksprache

Beispiel

SqlConnection sqlConn = new SqlConnection(CONNSTRING);
sqlConn.Open();
Demo.PrintHeader("MetaDataCollections:");
dt = sqlConn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.MetaDataCollections);
Demo.PrintTable(dt);
Demo.PrintHeader("Liste der Tabellen:");
DataTable dt = sqlConn.GetSchema("Tables");
Demo.PrintTable(dt);
Demo.PrintHeader("Liste der Views:");
dt = sqlConn.GetSchema("Tables");
Demo.PrintTable(dt);
Demo.PrintHeader("Unterstützte Datentypen:");
dt = sqlConn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataTypes);
Demo.PrintTable(dt);
Demo.PrintHeader("Unterstützte Einschränkungen:");
dt = sqlConn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.Restrictions);
Demo.PrintTable(dt);
Demo.PrintHeader("Informationen über die Datenbank:");
dt = sqlConn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.DataSourceInformation);
Demo.PrintTable(dt);
Demo.PrintHeader("Reservierte Worte:");
dt = sqlConn.GetSchema(System.Data.Common.DbMetaDataCollectionNames.ReservedWords);
Demo.PrintTable(dt);

Einschränkungen angeben

Die Nutzung der Filter ist wenig komfortabel, entspricht aber der Anforderung eine universelle Programmierschnittstelle für die unterschiedlichen Datenbankmanagementsysteme zu schaffen. Die DbMetaDataCollectionNames.Restrictions liefert für die Metadatentyp Columns vier Filter: Catalog, Owner, Table und Column. Dies bedeutet, dass im zweiten Parameter bei GetSchema() vier Werte anzugeben sind. Filter, die nicht gesetzt werden sollen, sind mit null zu belegen. Das folgende Beispiel zeigt, wie Sie eine Liste der Spalten der Tabelle "FL_Fluege" erhalten.
Demo.PrintHeader("Liste der Spalten der Tabelle FL_Fluege:");
string[] e = new String[] { null,null,"Fl_Fluege",null };
dt = sqlConn.GetSchema("Columns", e);
Demo.PrintTable(dt);
Listing 8.26: Eingeschränkte Suche