DevTrain

Autor: Bernhard Elbl

Schema Informationen von Datenbanken

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.


Erfasst am: 08.04.2002 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=744
© Copyright 2003 ppedv AG - http://www.ppedv.de