Das Connection-Object von ADO bietet uns eine oft sehr hilfreiche Methode, um umfassende Informationen über die Datenbank in Erfahrung zu bringen. Welche Datenbanken sind auf dem aktuellen Server, welche Datentypen unterstützt der OLE DB Provider(z.B. für SQL-Server), welche Tabellen, Sichten, deren Spalten und wiederrum deren Datentypen, welche Stored Procedures, Stored Procedure Parameter usw, usw... Das sind nur einige Datenbank-Information, die uns diese Schemas bereitstellen VORAUSGESETZT, dass Schemas vom aktuellen Provider unterstützt werden.
Wie komme ich an ein Schema ran?
Das läuft wie bereits erwähnt über das Connection-Object und dessen Methode OpenSchema. Diese liefert uns ein (Schema-)Recordset zurück, dass die Informationen enthält. Die genauen Information(ob Tabellen, oder Stored Procedures angezeigt werden sollen) werden durch das SchemaEnum spezifiziert. Auch diese Informationen können weiter eingegrenzt werden, dazu aber später.
Folgendes Beispiel zeigt alle Tabellen einer Datenbank an.
<% set cn = server.CreateObject("ADODB.Connection") ' Verbindung zur DB herstellen cn.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=Northwind;Data Source=myserver"
' --> für den Fall das Schema-Recordsets nicht unterstützt werden, tritt ein Fehler auf!!! on error resume next set rs = cn.OpenSchema(adSchemaTables) ' --> alle Tables der DB auflisten lErrNumber = err.number on error goto 0 if lErrNumber = 0 then ' wenn Schemas unterstützt werden ' alle Schema-Info´s (Recordset) ausgeben.............. if not (rs.EOF and rs.BOF) then Response.Write "<table border=""1"">" Response.Write "<tr>" for i = 0 to rs.Fields.Count-1 Response.Write "<td>" & rs.Fields(i).Name & "</td>" next Response.Write "</tr>" do until rs.EOF Response.Write "<tr>" for i = 0 to rs.Fields.Count-1 Response.Write "<td>" & rs.Fields(i).Value & "</td>" next Response.Write "</tr>" rs.MoveNext loop Response.Write "</table>" end if else Response.Write "<tr><td>Schemas werden vom Provider nicht unterstützt!</td></tr>" end if set rs = nothing set cn = nothing %> |
Eingrenzen von Schema-Information durch ein Kriterium.
Das Beispiel oben gibt ein Table-Schema-Recordset zurück. Hier werden alle Tables aufgelistet, d.h. Tabellen, System-Tabellen und Sichten. Wenn wir jetzt nur Tabellen ausgeben wollen können wir ein Kriterium setzen. Der Spalten-Name für den Tabellen-Typen heisst "TABLE_TYPE", allerdings hilft uns der nicht weiter:-( Diese Spalte ist die 4. Spalte im Recordset. Über die Array-Funktion von VB-Script können wir unser Kriterium setzen. Und zwar so.
set rs = cn.OpenSchema(adSchemaTables,Array(Empty,Empty,Empty,"TABLE")) |
"TABLE" ist der Wert der für normale Benutzer-Tabellen in der Spalte "TABLE_TYPE" steht.
Unten können Sie ein Beispiel downloaden, mit dem Sie alle Schema-Information Ihrer Datenbank bequem betrachten können.