Bild
Inhalt Index Vorheries Kapitel Nächstes Kapitel

KAPITEL 8

Veröffentlichen von Informationen und Anwendungen


Mit Internet Information Server lassen sich sowohl Informationen als auch Anwendungen veröffentlichen. Das heißt, daß Ihre Web Site vielfältige Objekte, angefangen von statischen Seiten bis hin zu interaktiven Anwendungen, enthalten kann. Sie haben auch die Möglichkeit, Informationen in Datenbanken abzufragen und aus diesen zu extrahieren oder in Datenbanken einzufügen.

In diesem Kapitel werden folgende Vorgänge erläutert:


Anfang Vorbereiten von Informationen für die Veröffentlichung

Die meisten Web-Seiten liegen im HTML (HyperText Markup Language)-Format vor. HTML-Dateien sind einfache ASCII-Textdateien mit eingebetteten Codes für die Formatdefinition und Hypertext-Verknüpfungen. Da sich die HTML-Spezifikationen fortwährend ändern, sollten Sie beim Konzipieren Ihrer HTML-Seiten die aktuellen HTML-Spezifikationen zu Rate ziehen (diese können im Internet eingesehen werden).

Verfassen von HTML-Dateien

Zum Erstellen und Bearbeiten von HTML-Dateien können Sie einen beliebigen Texteditor, z. B. den Editor oder Write, verwenden. Möglicherweise finden Sie es jedoch einfacher, mit einem HTML-Editor, wie Microsoft® FrontPage™ oder dem Internet Assistant für Microsoft Word, zu arbeiten.

Der HTML-Editor oder ein anderes System werden zum Erstellen von HTML-Dateien verwendet, die Hypertext-Verknüpfungen zu anderen Dateien auf dem Computer enthalten können. Wenn Sie Bilder oder Klänge integrieren möchten, benötigen Sie außerdem die zum Erstellen und Bearbeiten dieser Dateien geeignete Software.

Veröffentlichen von HTML-Dateien und anderen Dateiformaten

Die von Ihnen veröffentlichten Dateien können Bilder und Klänge enthalten. Sie können auch Verknüpfungen zu Microsoft® Office-Dateien oder nahezu allen anderen Dateiformaten erstellen. Remote-Benutzer müssen über die geeignete Anwendung zum Anzeigen von nicht im HTML-Format vorliegenden Dateien verfügen. Wenn Sie beispielsweise wissen, daß allen Benutzern Microsoft Word zur Verfügung steht, können Sie Verknüpfungen zu .doc-Dateien von Microsoft Word herstellen. Die Benutzer klicken auf die Verknüpfung, und das Dokument wird auf dem Computer des Benutzers in Word angezeigt.

Nach dem Erstellen von Informationen in HTML oder anderen Formaten können Sie diese Informationen entweder in das Standardverzeichnis InetPub\Wwwroot kopieren oder als Standard-Basisverzeichnis das Verzeichnis wählen, in dem die Informationen enthalten sind.

MIME-Konfiguration

Wenn Ihr Server Dateien in mehreren Formaten bereitstellt, muß der Computer über eine MIME (Multipurpose Internet Mail Extension)-Zuordnung für die einzelnen Dateitypen verfügen. Wenn die MIME-Zuordnung auf dem Server nicht für einen bestimmten Dateityp eingerichtet ist, sind Browser unter Umständen nicht in der Lage, die Datei abzurufen. Informationen zu den standardmäßigen MIME-Zuordnungen finden Sie in der Registrierung von Windows NT.

Starten Sie zum Konfigurieren zusätzlicher MIME-Zuordnungen den Registrierungseditor (Regedt32.exe), und öffnen Sie den Schlüssel:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\InetInfo\Parameters\MimeMap.

Fügen Sie den für den Computer erforderlichen REG_SZ-Wert für die MIME-Zuordnung in folgender Syntax hinzu:

<mime-typ>,<dateinamenerweiterung>,<freier parameter>,<gopher-typ>

Beispiel:

text/html,htm,/unused,1
image/jpeg,jpeg,/unused,5

Die mit dem Wert verknüpfte Zeichenfolge (der Wertinhalt) sollte leer bleiben. Der Standardeintrag mit einem Sternchen (*) als Dateinamenerweiterung wird als Standard-MIME-Typ verwendet, wenn keine MIME-Zuordnung vorhanden ist. Wenn z. B. eine Anforderung für die Datei Current.vgr verarbeitet werden soll und die Dateinamenerweiterung .vgr keinem MIME-Typ zugeordnet ist, verwendet der Computer den für die Erweiterung * festgelegten MIME-Typ. Dabei handelt es sich um den für Binärdaten verwendeten Typ. Gewöhnlich bewirkt dies, daß Browser die Datei auf der Festplatte speichern.

Einschließen weiterer Dateien mit der Include-Anweisung

Sie können häufig wiederkehrende Informationen zu einer HTML-Datei hinzufügen, unmittelbar bevor Sie die Datei an einen Benutzer senden. Diese Funktion ist hilfreich, wenn Sie denselben Text, z. B. Copyright-Informationen oder eine Verknüpfung zur Homepage, auf jeder HTML-Seite einfügen möchten.

Die Include-Anweisung muß folgendes Format aufweisen:

<!--#include file="Wert"-->

Als Wert kann ein relativer oder ein vollständiger Pfad, ausgehend vom Basisverzeichnis des WWW-Dienstes, angegeben werden.

Wenn Sie z. B. eine Verknüpfung zu Ihrer Homepage in jedes HTML-Dokument einfügen möchten, gehen Sie wie folgt vor:


Beachten Sie, daß sich alle Pfade auf das WWW-Basisverzeichnis beziehen und virtuelle Verzeichnisse enthalten können.


Anfang Veröffentlichen von dynamischen Anwendungen

Eines der interessantesten Merkmale von Microsoft Internet Information Server stellt die Möglichkeit dar, Anwendungen oder Skripten bereitzustellen, die Remote-Benutzer durch Klicken auf HTML-Verknüpfungen oder nach dem Ausfüllen und Einsenden eines HTML-Formulars starten können. Mit Hilfe von Programmiersprachen wie C oder Perl können Sie Anwendungen und Skripten erstellen, die der Benutzer über dynamische HTML-Seiten aufrufen kann.

Erstellen von Anwendungen oder Skripten

Interaktive Anwendungen oder Skripten können in fast allen 32-Bit-Programmiersprachen, wie C oder Perl, oder als Windows NT-Stapelverarbeitungsdateien (. bat oder . cmd) geschrieben werden. Zum Schreiben von Anwendungen oder Skripten können Sie eine der beiden unterstützten Schnittstellen, ISAPI (Microsoft Internet Server Application Programming Interface) oder CGI (Common Gateway Interface), verwenden. Dokumentation für ISAPI können Sie bei Microsoft über das MSDN (Microsoft Developer Network) beziehen. Eine Einführung in CGI finden Sie weiter unten in diesem Kapitel. Dokumentation für CGI steht im Internet zur Verfügung. Über ein Stapelverarbeitungsprogramm können alle an der Eingabeaufforderung gültigen Befehle ausgeführt werden.

Anwendungen, die über ISAPI erstellt werden, werden als DLLs (Dynamic-Link Libraries) kompiliert, die vom WWW-Dienst beim Start geladen werden. Da es sich bei ISAPI-Programmen um speicherresidente Programme handelt, sind diese deutlich schneller als nach der CGI-Spezifikation entwickelte Anwendungen.

Herunterladbares ISAPI-Perl

Der unabhängige Software-Hersteller Hip Inc., der Perl für Win32-Plattformen entwickelt, bietet eine Version von Perl an, die als ISAPI-Anwendung ausgeführt wird. Dies bedeutet, daß sich Perl-Server-Skripten wesentlich schneller ausführen lassen als zuvor, da das Modell der ISAPI genutzt wird. Eine nichtunterstützte Version von ISAPI Perl steht unter http://www.perl.hip.com/ zum Herunterladen bereit. Weitere Informationen finden Sie an dieser WWW-Site. Bitte senden Sie Fragen oder Rückmeldungen an den EMail-Alias perlis@mail.hip.com, besonders wenn Sie bereits Perl-Skripten verwenden.

Internet-Server-API

ISAPI für Windows NT kann zum Entwickeln von Anwendungen eingesetzt werden, die Web-Benutzer durch Ausfüllen eines HTML-Formulars oder Klicken auf eine Verknüpfung auf einer HTML-Seite an Ihrer Web Site aktivieren können. Die Remote-Anwendung kann anschließend die vom Benutzer eingegebenen Daten erfassen, im Rahmen des Programms beliebig verarbeiten und die Ergebnisse anschließend in einer HTML-Seite ausgeben oder die Informationen in einer Datenbank speichern.

Mit Hilfe der ISAPI lassen sich Anwendungen erstellen, die als DLLs auf dem Web Server ausgeführt werden. Wenn Sie zuvor bereits mit CGI (Common Gateway Interface)-Skripten gearbeitet haben, werden Sie feststellen, daß die ISAPI-Anwendungen wesentlich leistungsfähiger sind, da sie zur Laufzeit des Servers in den Speicher geladen werden. Sie erfordern weniger Overhead, da die einzelnen Anforderungen keine separaten Prozesse starten.

[08_i260b  3917 bytes ]

Eine weitere ISAPI-Funktion ermöglicht sowohl die Vorverarbeitung von Anforderungen als auch die Nachbearbeitung von Rückmeldungen und somit die Web Site-spezifische Verarbeitung von HTTP (HyperText Transport Protocol)-Anforderungen und -Rückmeldungen. ISAPI-Filter können für Anwendungen, wie die benutzerdefinierte Echtheitsbestätigung, Zugriffsberechtigungen und Protokollierung, verwendet werden.

[08_i260c  3654 bytes ]

Durch die gleichzeitige Verwendung von ISAPI-Filtern und -Anwendungen ist das Einrichten äußerst komplexer Web Sites möglich. ISAPI-Erweiterungen können ferner in Verbindung mit dem Internet-Datenbank-Connector für das Erstellen von Web Sites mit ausgeprägter Interaktivität verwendet werden.

[08_i260d  4596 bytes ]

Ausführliche Informationen über das Programmieren mit ISAPI finden Sie in dem im MSDN erhältlichen Microsoft Win32 BackOffice Software Development Kit (SDK). Weitere Bestellinformationen zum ISAPI SDK finden Sie im einleitenden Kapitel „Bevor Sie beginnen“.

Common Gateway Interface

CGI (Common Gateway Interface) ist ein Satz von Spezifikationen für den Informationsaustausch zwischen einem Client-Web Browser, einem Web Server und einer CGI-Anwendung. Ein Client-Web Browser startet eine CGI-Anwendung, wenn der Benutzer ein HTML-Formular ausfüllt oder auf eine Verknüpfung in einer HTML-Seite auf dem Web Server klickt. Ebenso wie ISAPI kann die Remote-Anwendung anschließend die vom Client-Web Browser gelieferten Daten erfassen, sie im Rahmen des Programms verarbeiten und die Ergebnisse anschließend in einer HTML-Seite ausgeben oder die Informationen in einer Datenbank speichern. Da einfache CGI-Anwendungen häufig mit Skriptsprachen wie Perl entwickelt werden, bezeichnet man CGI-Anwendungen in manchen Fällen auch als Skripten.

Die meisten 32Bit-Anwendungen von Windows NT, die den CGI-Spezifikationen entsprechen, eignen sich für Microsoft Internet Information Server.

Die folgende Abbildung verdeutlicht den Informationsaustausch über CGI zwischen einem Browser, einem Server und einer CGI-Anwendung. Der Vorgang umfaßt fünf Schritte, die im Rest dieses Abschnitts erläutert werden.

[08_i260e  3901 bytes ]

Ein Client sendet eine Anforderung

Ein Client-Browser kann eine CGI-Anforderung an einen Server auf zwei Arten stellen:

GET

POST


Der Client löst einen CGI-Prozeß aus, indem er in einer HTML-Seite auf eines der folgenden Elemente klickt:

Der Server empfängt die Anforderung

Der URL, den der Client-Browser an den Server sendet, enthält den Namen des auszuführenden CGI-Skripts bzw. der auszuführenden Anwendung. Der Server vergleicht die Dateinamenerweiterung mit dem Registrierungsschlüssel des Servers für die Skriptzuordnung, um das auszuführende Programm zu bestimmen. Der Server verfügt über ScriptMap-Einträge für .cmd- und .bat-Dateien, für die Cmd.exe ausgeführt wird, und für .idc-Dateien, für die der Internet-Datenbank-Connector ausgeführt wird. Soll der Server einen CGI-Anwendungstyp ohne Erweiterungszuordnung ausführen können, müssen Sie einen Eintrag für diesen Anwendungstyp zu dem Registrierungsschlüssel hinzufügen. Damit beispielsweise Perl-Skripten ausgeführt werden können, fügen Sie einen Eintrag im folgenden Format hinzu:

.pl: REG_SZ: C:\RESKIT\PERL\BIN\PERL.EXE %s %s

Dabei gilt:

Der Server übergibt die Anforderung an die Anwendung

Der Server übergibt über Umgebungsvariablen Informationen an die CGI-Anwendung und startet dann die Anwendung. Einige dieser Variablen sind Server-abhängig, die Mehrzahl kommt jedoch vom Client-Browser und bezieht sich entweder auf den Client-Browser oder auf die gesendete Anforderung. Eine Liste der Umgebungsvariablen finden Sie in der Tabelle am Ende dieses Kapitels.

Die CGI-Anwendung liefert Daten an den Server

Die Anwendung führt die entsprechende Verarbeitung aus. Gegebenenfalls schreibt die Anwendung die Daten in einem für den Client empfangbaren Format in den Standardausgabestrom (STDOUT). Bei der Rückgabe der Daten muß die Anwendung ein bestimmtes Format einhalten:

Der Server liefert die Daten an den Client

Der Server nimmt die über STDOUT empfangenen Daten und fügt standardmäßige HTTP-Header hinzu. Anschließend gibt er die HTTP-Nachricht zurück an den Client.

Weitere Informationen über CGI finden Sie in den CGI-Spezifikationen unter „http://hoohoo.ncsa.uiuc.edu/cgi/“.

CGI und Internet Information Server

Der WWW-Dienst unterstützt die standardmäßige CGI (Common Gateway Interface)-Spezifikation. Allerdings sollten Sie folgende Besonderheiten beachten, die durch die Implementierung von CGI unter Internet Information Server bedingt sind:
Gewöhnlich sind CGI-Anwendungen eigenständige Programme. Im Gegensatz dazu werden ISAPI-Anwendungen in der Regel als DLLs geladen und stellen daher Server-Erweiterungen dar. Daher werden ISAPI-Anwendungen im Vergleich zu CGI-Anwendungen und -Skripten schneller ausgeführt.

Sicherheitserwägungen für Programme

Beim Einsatz von CGI (Common Gateway Interface)-Programmen ist äußerste Vorsicht angebracht, um Sicherheitsrisiken für den Server zu vermeiden. Grundsätzlich sollten Sie für virtuelle Verzeichnisse mit CGI- oder ISAPI (Internet Server API)-Anwendungen nur die Ausführungsberechtigung erteilen.

Es ist dringend zu empfehlen, die Skriptzuordnung zu konfigurieren. Durch die Skriptzuordnung wird sichergestellt, daß der richtige Interpreter (z. B. Cmd.exe) gestartet wird, wenn ein Client eine ausführbare Datei anfordert.

Für WWW-Informationsverzeichnisse sollte nur die Leseberechtigung erteilt werden. Für alle ausführbaren Dateien, die zum Herunterladen von NTFS (Windows NT File System)-Laufwerken bereitgestellt werden, sollte nur der Lesezugriff aktiviert sein.

Es ist möglich, Stapelverarbeitungsdateien als CGI-Programme auszuführen; Sie sollten dabei jedoch äußerste Vorsicht walten lassen, um Sicherheitsrisiken für den Server auszuschließen.

Anmerkung   Ausführbare CGI-Dateien können auch die Dateinamenerweiterung .exe oder .cgi aufweisen.

Ausführungsberechtigung für ISAPI-Anwendungen

ISAPI-Anwendungen werden von Internet Information Server im Sicherheitskontext des anrufenden Benutzers gestartet. Der Benutzer wird einer Zugriffsüberprüfung unterzogen. Über die Verwendung von NTFS-Berechtigungen zusammen mit ISAPI-Anwendungen wie dem IDC (Internet-Datenbank-Connector) läßt sich die Ausführung auf bestimmte Benutzer beschränken.

Beispielsweise können Sie den IDC sichern, ohne Berechtigungen für die .idc-Datei zu vergeben, indem Sie den geeigneten Benutzern die NTFS-Ausführungsberechtigung für Inetsrv\Httpodbc.dll erteilen. Httpodbc.dll ist der Name der ISAPI-Anwendungs-DLL, die den IDC implementiert. Versucht nun ein Benutzer, den IDC auszuführen, werden vom Server die Berechtigungen überprüft. Nur wenn dem Benutzer die Ausführungsberechtigung erteilt wurde, erhält der Benutzer Zugriff.

Anmerkung   Nach dem Laden einer ISAPI-Anwendung bleibt diese geladen, bis der WWW-Dienst beendet wird. Änderungen an den Sicherheitsbeschreibungen nach dem Laden der ISAPI-Anwendung werden von Internet Information Server nicht verfolgt. Wenn Sie nach dem Laden einer ISAPI-Anwendung deren Berechtigungen ändern, müssen Sie den WWW-Dienst beenden und erneut starten, um die Änderung in Kraft zu setzen.

Verwenden Sie besondere Sorgfalt auf das Erstellen von Zugangskontrollisten (Access Control Lists, ACLs) für das Verzeichnis Winnt und seine Unterverzeichnisse. Einige ISAPI-Anwendungen und Datenbanken benötigen Zugriff auf Dateien und DLLs in diesen Verzeichnissen.

Anmerkung   ISAPI-Anwendungs-DLLs können die Dateinamenerweiterung .dll oder .isa aufweisen.

Installieren der Anwendung unter Internet Information Server

Kopieren Sie die von Ihnen geschriebenen Anwendungen oder Skripten in das Verzeichnis Scripts. Hierbei handelt es sich um ein virtuelles Verzeichnis für Anwendungen. Für dieses Verzeichnis wurde die Berechtigung Ausführen festgelegt.

Stellen Sie sicher, daß alle von der Anwendung gestarteten Prozesse über ein Konto mit geeigneten Berechtigungen ausgeführt werden. Falls die Anwendung andere Dateien verwendet, muß das dem Programm zugewiesene Konto über die entsprechenden Berechtigungen für diese Dateien verfügen. Standardmäßig werden Anwendungen über das Konto IUSR_Computer_Name ausgeführt, das Administratorrechte und Ausführungsberechtigung für die Anwendungsdateien besitzen muß.

Ausführen der Anwendung

Wenn eine Anwendung keine Benutzerdaten abfragt, genügt es gewöhnlich, eine Verknüpfung zu der Anwendung über eine einfache HTML-Datei zu erstellen. Benötigt die Anwendung jedoch Benutzerdaten, bietet sich unter Umständen die Verwendung eines HTML-Formulars an. In anderen Fällen genügt es, einen URL (Uniform Resource Locator) zu senden, der üblicherweise die Datenparameter zum Aufrufen eines Programms enthält.

Eine HTML-Verknüpfung zu einer Anwendung, für die keine Benutzereingaben erforderlich sind, könnte beispielsweise wie folgt lauten:

http://www.firma.de/scripts/Katalog.exe

Scripts stellt hierbei das virtuelle Verzeichnis für interaktive Anwendungen dar.

Wenn Sie eine Anwendung erstellt haben, die Benutzereingaben erfordert, sollten Sie sowohl mit der Erstellung von HTML-Formularen als auch mit der Verwendung dieser Formulare mit ISAPI oder CGI vertraut sein. Ausführliche Informationen zu diesen Themen finden Sie im Internet oder in anderen Informationsquellen.

Verknüpfen von Interpretern und Anwendungen

Aufgrund der Flexibilität von Internet Information Server ist es möglich, Anwendungen in fast allen Programmiersprachen zu erstellen. Anhand der Dateinamenerweiterung wird bestimmt, welcher Interpreter für die jeweilige Anwendung aufgerufen werden soll. Die standardmäßigen Interpreterverknüpfungen sind nachfolgend aufgelistet. Mit Hilfe des Registrierungseditors können Sie zusätzliche Verknüpfungen herstellen.

Erweiterung Standard-Interpreter
.bat, .cmd Cmd.exe
.idc Httpodbc.dll
.exe, .com System

Sicherheitsüberlegungen

Wenn Sie Remote-Benutzern das Ausführen von Anwendungen auf Ihrem Computer gestatten, riskieren Sie, daß Hacker versuchen, sich Zugang zu Ihrem System zu verschaffen. Microsoft Internet Information Server ist standardmäßig so konfiguriert, daß zwei wichtige Maßnahmen das Risiko vermindern, daß fremde Anwendungen unerwünschte Befehle ausführen können.

Zum einen werden Ihre Anwendungen in dem virtuellen Verzeichnis Scripts gespeichert, das ausdrücklich als Anwendungsverzeichnis gekennzeichnet ist. Nur der Administrator kann einem als Anwendungsverzeichnis gekennzeichneten Verzeichnis Programme hinzufügen. Daher haben Unbefugte nicht die Möglichkeit, ohne Administratorrechte unerwünschte Anwendungen zu kopieren und diese auf Ihrem Computer auszuführen.

Es ist ratsam, dem Konto IUSR_Computer_Name die Berechtigungen Lesen und Ausführen für das mit dem virtuellen Ordner verknüpfte Verzeichnis zu erteilen und nur dem Administrator Vollzugriff zu gewähren. Perl-Skripten (Erweiterung .pl) und IDC-Dateien (Erweiterung .idc oder .htx) benötigen die Berechtigungen Lesen und Ausführen. Erteilen Sie keine Schreibberechtigung, um zu verhindern, daß die Sicherheit gefährdende Dateien auf Ihrem Server installiert werden.

Zum anderen werden alle Anforderungen von Remote-Benutzern über das Konto IUSR_Computer_Name verarbeitet, wenn Sie den WWW-Dienst so konfiguriert haben, daß nur anonyme Anmeldungen zulässig sind. Standardmäßig besteht im NTFS (Windows NT File System) nicht die Möglichkeit, über das Konto IUSR_Computer_Name Dateien zu löschen oder zu ändern, es sei denn, der Administrator vergibt entsprechende Zugriffsberechtigungen. Daher könnten unerwünschte Programme, selbst wenn diese auf den Computer kopiert würden, die Informationen nicht gravierend beschädigen, da auf den Computer und die darauf enthaltenen Dateien mit den eingeschränkten Berechtigungen des Kontos IUSR_Computer_Name zugegriffen wird.


Anfang Veröffentlichen von Informationen und Verwenden einer Datenbank

Der WWW-Dienst und die im Lieferumfang von Internet Information Server enthaltenen ODBC (Open Data Base Connectivity)-Treiber bieten folgende Möglichkeiten:

Funktionsweise des Internet-Datenbank-Connectors

Grundsätzlich gestaltet sich der Datenbankzugriff über Internet Information Server wie in der folgenden Übersicht dargestellt.

[08_i260f  4393 bytes ]

Web Browser (z. B. der Internet Explorer oder von anderen Firmen wie Netscape entwickelte Browser) übermitteln Anforderungen an den Internet-Server über HTTP. Der Internet-Server sendet als Rückmeldung ein in HTML formatiertes Dokument. Der Zugriff auf Datenbanken erfolgt über eine Komponente von Internet Information Server mit dem Namen IDC (Internet-Datenbank-Connector). Der Internet-Datenbank-Connector, Httpodbc.dll, ist eine ISAPI DLL, die über ODBC auf Datenbanken zugreift.

Die folgende Abbildung zeigt die für den Datenbankzugriff über Internet Information Server notwendigen Komponenten.

[08_i260g  6417 bytes ]

Der IDC verwendet zweierlei Dateien für die Steuerung des Datenbankzugriffs und die Generierung einer Web-Seite als Ausgabe. Bei diesen Dateien handelt es sich um Dateien mit den Erweiterungen .idc (Internet Database Connector) und .htx (HTML Extension).

Die Internet-Datenbank-Connector-Dateien enthalten die Informationen, die zum Herstellen einer Verbindung zur entsprechenden ODBC-Datenquelle und zum Ausführen der SQL-Anweisung erforderlich sind. Darüber hinaus enthält eine Internet-Datenbank-Connector-Datei auch den Namen und den Pfad für die Datei mit der HTML-Erweiterung.

Die Datei mit der HTML-Erweiterung dient als Vorlage für das eigentliche HTML-Dokument, das nach dem Einfügen der Datenbankinformationen durch den IDC an den Web Browser zurückgesendet wird.

Installieren von ODBC und Erstellen von Systemdatenquellen

Wenn bei der Installation die Option ODBC ausgewählt wird, werden die ODBC-Komponenten, Version 2.5, installiert. Diese ODBC-Version unterstützt Systemdatenquellen (DSN) und ist für die Verwendung von ODBC mit Microsoft Internet Information Server erforderlich.

Systemdatenquellen wurden erstmalig in der ODBC-Version 2.5 eingesetzt. Sie ermöglichen Windows NT-Diensten die Verwendung von ODBC.

So installieren Sie die ODBC-Treiber

So erstellen Sie die Systemdatenquellen


Wichtig   Stellen Sie sicher, daß Sie auf die Schaltfläche System-DSN klicken. Der Internet-Datenbank-Connector funktioniert nur mit Systemdatenquellen.

32-Bit-ODBC-Treiber

Der Internet-Datenbank-Connector benötigt 32-Bit-ODBC-Treiber. Informationen über die Option ODBC finden Sie in den Hilfedateien zu Internet Information Server oder in der Windows NT ODBC-Hilfedatei.

ODBC-Treiber für Microsoft Access

Der Internet-Datenbank-Connector benötigt die 32-Bit-ODBC-Treiber, die mit Microsoft® Office 95 und Microsoft® Access 95 geliefert werden. Der ODBC-Treiber für Microsoft Access 2.0 arbeitet nicht mit Internet Information Server zusammen.

Verfassen von Web-Seiten mit Datenbankzugriff

Um über eine Web-Seite Zugriff auf eine SQL-Datenbank gewähren zu können, ist es erforderlich, daß Sie eine Internet-Datenbank-Connector-Datei (.idc) und eine Datei mit HTML-Erweiterung (.htx) erstellen.

Beispiel für eine Datenbankabfrage

In diesem Beispiel wird zunächst eine einfache Web-Seite mit dem Namen Sample.htm erstellt. Die Beispiel-Web-Seite enthält einen Hyperlink, der eine Abfrage auslöst, die mit Hilfe des ODBC-Treibers für Microsoft SQL Server ausgeführt wird. Das Ergebnis wird in Form einer weiteren Web-Seite geliefert.

Die folgende Abbildung zeigt die Datei Dbsamp1.htm in der Form, wie sie vom Microsoft Internet Explorer angezeigt wird. (Dabei wird vorausgesetzt, daß Internet Information Server auf einem Computer mit dem Namen Web Server installiert wurde.)

[08_i260m  10889 bytes ]

Wird auf den Hyperlink „Klicken Sie hier, um die Abfrage zu starten“ geklickt, wird ein weiterer URL (Uniform Resource Locator) an den Server gesendet. Der URL wird dem Hyperlink-Text vorangestellt (formatiert als versteckter Text):

<A HREF="http://webserver/samples/dbsamp/dbsamp1.idc">Klicken Sie hier, um die Abfrage zu starten</A>

Der URL verweist auf die Internet-Datenbank-Connector-Datei, die der IDC verwenden soll (Dbsamp1.idc). Die Dateizuordnung anhand der Erweiterung macht die Erwähnung von Httpodbc.dll im URL überflüssig.

Der Einsatz des Internet-Datenbank-Connectors unter Internet Information Server verläuft für dieses Beispiel in sechs Schritten, die im folgenden Diagramm dargestellt sind.

[08_i260n  6139 bytes ]

[08_i260o  18207 bytes ]

Erläuterung der Datei Sample.htx

Zur Rückgabe der Daten an den WWW-Client werden in der .idc-Datei die HTML-Erweiterungsdatei (.htx) und die ODBC-Daten zusammengefügt. Die kombinierten Daten werden an standardmäßige HTTP-Header angefügt (200 OK Status, Content-Type usw.) und an den WWW-Dienst übergeben, über den sie zum Client gelangen.

Die .htx-Datei ist ein HTML-Dokument mit zusätzlichen, in <%%> oder <!--%%--> eingeschlossenen Kennzeichen, über die vom IDC dynamische Daten in das Dokument eingefügt werden. Die HTML-Formatierung in der .htx-Datei bestimmt gewöhnlich die Formatierung der gelieferten Daten. Durch sechs Schlüsselwörter (begindetail, enddetail, if, else, endif und „%z“) läßt sich steuern, wie die Daten aus der Datenbank mit dem HTML-Format in der .htx-Datei zusammengeführt werden. Datenbankspaltennamen geben an, welche Daten im HTML-Dokument zurückgegeben werden. Beispielsweise werden durch die folgende Zeile in einer .htx-Datei Daten aus der E-Mailname-Spalte für jeden verarbeiteten Datensatz eingefügt:

<%begindetail%><%E-Mailname%><%enddetail%>

Die Datei Sample.htx ist ein HTML-Dokument mit Internet-Datenbank-Connector-Kennzeichen für aus der Datenbank gelieferte Daten (die Kennzeichen sind zur Verdeutlichung fett gedruckt). Die HTML-Formatierung wurde zum größten Teil entfernt, um die IDC-Kennzeichen hervorzuheben.

Ein Großteil der HTML-Formatierung wurde zur Vereinfachung entfernt.

<HTML>
<BODY>
<HEAD><TITLE>Autoren und Jahresumsatz</TITLE></HEAD>
<%if idc.sales eq ""%>

<H2>Autoren mit mehr als <I>5000</I> verkauften Büchern</H2>
<%else%>

<H2>Autoren mit mehr als <I><%idc.sales%></I> verkauften Büchern</H2>
<%endif%>

<P>
<%begindetail%>
<%if CurrentRecord EQ 0 %>

Abfrageergebnisse:
<B>Autor Jahresumsatz<BR></B>
<%endif%>
<%au_lname%>
<%ytd_sales%>
<%enddetail%>
<P>
<%if CurrentRecord EQ 0 %>
<I><B>Leider hat kein Autor einen Jahresumsatz größer </I><%idc.sales%>.</B>

<P>
<%else%>

<HR>
<I>
Die hier dargestellte Web-Seite wurde zusammengefügt aus den Ergebnissen der SQL-Abfrage und der Vorlagedatei Sample.htx.
<P>
Die Zusammenfügung wurde vom Microsoft Internet-Datenbank-Connector vorgenommen, und die Ergebnisse wurden durch Microsoft Internet Information Server an diesen Web Browser gesendet.
</I>
<%endif%>

</BODY>
</HTML>

Durch die <%begindetail%>-<%enddetail%>-Abschnitte wird bestimmt, in welchen Bereichen die gelieferten Datenbankzeilen in das Dokument eingefügt werden. Die von der Abfrage gelieferten Spalten sind in <%%> eingeschlossen; in diesem Beispiel <%au_lname%> und <%ytd_sales%>.

Einführung in die Merkmale des Internet-Datenbank-Connectors

Der Internet-Datenbank-Connector bietet eine Reihe von Merkmalen, die zum Erstellen einer Web-Seite mit Daten aus einer Datenbank dienen.

Internet-Datenbank-Connector-Dateien

Internet-Datenbank-Connector-Dateien enthalten die Informationen für den Datenbankzugriff. In folgenden Abschnitt werden die Merkmale von Internet-Datenbank-Connector-Dateien erläutert.

Parameter

Das Beispiel im vorherigen Abschnitt zeigt nur die einfachste Art von Abfragen, ein Abfrage, die vollständig in der Internet-Datenbank-Connector-Datei definiert ist. Diese Art von Abfragen ist zwar nützlich, leistungsfähigere Web-Seiten lassen sich jedoch durch die Verwendung von Parametern erstellen. Parameter sind die Namen und Werte von Steuerelementen in HTML-Formularen, wie „<INPUT…>“, sowie Namen, die direkt in URLs angegeben werden. Diese Namen und Werte werden von Web Browsern gesendet und können in SQL-Anweisungen auf dem Server verwendet werden.

Beispielsweise lieferte im letzten Abschnitt die Abfrage in Sample.idc nur die Autoren, deren Jahresumsätze mehr als 5000 DM betrugen. Mit Hilfe eines Parameters können Sie eine Web-Seite erstellen, in der ein Benutzer anstelle der 5000 eine andere Zahl wählen kann.

In der Web-Seite muß der Benutzer zur Eingabe des Umsatzes aufgefordert werden und dann die zugehörige Variable mit „sales“ benannt werden. Dbsamp2.htm zeigt ein Formular mit einem Eingabefeld, über das die Zahl abgefragt wird:

[08_i260p  13574 bytes ]

Die HTML-Syntax für das Eingabefeld und die Schaltfläche in Sample2.htm lautet folgendermaßen:

<FORM METHOD="POST" ACTION="/scripts/samples/sample2.idc">
<P>
Geben Sie den aktuellen Jahresumsatz ein: <INPUT NAME="sales" VALUE="5000" >
<P>
<INPUT TYPE="SUBMIT" VALUE="Abfrage starten">
</FORM>

In der Internet-Datenbank-Connector-Datei Sample2.idc wird der fettgedruckte Parameter anstelle der Zahl 5000 verwendet:

SQLStatement:
+SELECT au_lname, ytd_sales
+ from pubs.dbo.titleview
+ where ytd_sales > %sales%

Der Parametername muß hier „sales“ lauten, damit er dem Term <INPUT NAME= „sales“ …> auf der Web-Seite entspricht. Parameter sind zur Unterscheidung von normalen SQL-Bezeichnern in Prozentzeichen (%) einzuschließen. Wenn der IDC den Parameter in der .idc-Datei findet, ersetzt er ihn durch den vom Web Browser gesendeten Wert und sendet dann die SQL-Anweisung an den ODBC-Treiber.

Das Prozentzeichen (%) dient auch als Stellvertreterzeichen in SQL. Über Stellvertreterzeichen können Sie in einer SQL-Abfrage ein Tabellenelement suchen, das bestimmte Zeichen enthält. Um ein einfaches % als SQL-Stellvertreterzeichen einzufügen, geben Sie „%%“ ein. Dies verhindert, daß der IDC versucht, das % als Parametermarkierung zu verwenden. Beispiel:

SQLStatement:
+SELECT au_lname, ytd_sales, title
+ from pubs.dbo.titleview
+ where title like '%%%title%%%'

Damit ein Prozentzeichen als SQL-Stellvertreterzeichen erkannt wird, müssen Sie zwei % eingeben und dann den Parameter in Prozentzeichen einschließen, um die Zeichenfolge als Parameter zu kennzeichnen. In dem Beispiel sucht die Abfrage nach allen Einträgen in der title-Spalte, die das Wort „title“ enthalten. Die Abfrage liefert folgendes Ergebnis:

title
title and deed
main title page
author and title

Um alle Einträge zu finden, die mit der Zeichenfolge „title“ beginnen, formulieren Sie die Abfrage folgendermaßen:

SQLStatement:
+SELECT au_lname, ytd_sales, title
+ from pubs.dbo.titleview
+ where title like '%title%%%'

Dieses Beispiel liefert folgendes Ergebnis:

title
title and deed

Um alle Einträge zu finden, die mit der Zeichenfolge „title“ enden, formulieren Sie die Abfrage folgendermaßen:

SQLStatement:
+SELECT au_lname, ytd_sales, title
+ from pubs.dbo.titleview
+ where title like '%%%title%'

Dieses Beispiel liefert folgendes Ergebnis:

title
author and title

Leistungsfähige Gruppen von Web-Seiten lassen sich erstellen, indem die Ausgabe einer Abfrage verwendet wird, um Verknüpfungen mit anderen Abfragen zu liefern. Möchten Sie beispielsweise die Titel eines bestimmten Autors anzeigen, anstatt nur den Autorennamen als Text zurückzugeben, können Sie diesen als Verknüpfung formatieren, die Sie für eine weitere Abfrage nutzen.

Wie Sie diese Art von Verknüpfung erstellen, zeigt ein weiteres Beispiel aus Internet Information Server. Dbsamp3.htm dient dazu, die Abfrage in Sample3.idc auszuführen, die Sample3.htx als Ausgabevorlage verwendet. Sample3.htx liefert Autorennachnamen als Verknüpfungen, die bei Anklicken die Titel für jeden Autor anhand von Sample3a.idc und Sample3a.htx liefern.

Felder in Internet-Datenbank-Connector (.idc)-Dateien

In den folgenden Tabellen sind die Felder zusammengestellt, die in einer Internet-Datenbank-Connector-Datei angegeben werden können. Beachten Sie, daß Parameter oder Server-Variablen an jeder beliebigen Stelle einer .idc-Datei verwendet werden können.

Notwendige Felder in einer Internet-Datenbank-Connector (.idc)-Datei
Feld Beschreibung
Datasource Der Name, welcher der ODBC-Systemdatenquelle (DSN) entspricht, die Sie zuvor mit Hilfe des ODBC-Administrators oder des mit den Beispielen bereitgestellten Programms erstellt haben.
Template Der Name der HTML-Erweiterungsdatei, welche die Formatierung der von dieser Abfrage gelieferten Daten bestimmt. Vereinbarungsgemäß haben diese Dateien die Erweiterung .htx.
SQLStatement Die auszuführende SQL-Anweisung. Die SQL-Anweisung kann Parameterwerte enthalten, die vom Client in Prozentzeichen (%) eingeschlossen werden müssen. Die SQL-Anweisung kann mehrere Zeilen in der Internet-Datenbank-Connector-Datei belegen. Im Anschluß an das Feld SQLStatement wird jede Zeile, die mit einem Pluszeichen (+) beginnt, als Teil der SQL-Anweisung betrachtet. Eine Datei kann mehrere SQL-Anweisungen enthalten.

Optionale Felder in einer Internet-Datenbank-Connector (.idc)-Datei
Feld Beschreibung
DefaultParameters = Param=Wert

[, Param=Wert]
[…]

Die Parameterwerte, die (falls vorhanden) in der Internet-Datenbank-Connector-Datei verwendet werden, wenn ein Parameter vom Client nicht angegeben wird.
Expires Die Anzahl von Sekunden bis zum Aktualisieren einer zwischengespeicherten Ausgabeseite. Ist eine nachfolgende Anforderung identisch, wird die zwischengespeicherte Seite geliefert, ohne daß auf die Datenbank zugegriffen wird. Das Feld ist hilfreich, wenn Sie eine erneute Abfrage der Datenbank nach einem bestimmten Zeitraum erzwingen möchten. Standardmäßig werden Ausgabeseiten vom IDC nicht zwischengespeichert. Dies geschieht nur, wenn das Feld Expires verwendet wird.
MaxFieldSize Die maximale Puffergröße, die vom IDC pro Feld reserviert wird. Zeichen, die diese Puffergröße überschreiten, werden abgeschnitten. Der Parameter gilt nur für aus der Datenbank zurückgelieferte Felder mit mehr als 8.192 Bytes. Der Standardwert beträgt 8.192 Bytes.
MaxRecords Die maximale Anzahl von Datensätzen, die der IDC für eine Abfrage liefert. Für den Wert gibt es keine Voreinstellung, so daß eine Abfrage maximal 4 Milliarden Datensätze liefern kann. Legen Sie den Wert fest, um die gelieferten Datensätze zu beschränken.
ODBCConnection Fügen Sie dieses Feld mit dem Wert Pool ein, um die Verbindung dem Verbindungs-Pool hinzuzufügen und die Verbindung zu der Datenbank für zukünftige Anforderungen offen zu halten. Der IDC sendet dann über eine solche Verbindung die Daten für die nachfolgende Ausführung einer .idc-Datei, welche dieselben Werte für Datasource, Username und Password enthält. Durch Setzen dieser Option können Sie die Leistung des Internet-Datenbank-Connectors verbessern. Daneben gibt es eine nonpool-Option, die angibt, daß die Verbindung für die .idc-Datei, in der die Option gesetzt ist, nicht aus dem Verbindungs-Pool genommen werden soll. Setzen Sie den Wert des Feldes auf nopool, wenn Sie den Verbindungsspeicher gezielter verwalten möchten. Auch wenn die Anzahl der gleichzeitigen Verbindungen beschränkt ist, sollte der Verbindungs-Pool nicht sämtliche Verbindungen belegen, da sonst kein anderer Benutzer eine Verbindung zu dem SQL Server herstellen kann.

Anmerkung Um standardmäßig einen Verbindungs-Pool zu führen, setzen Sie den Registrierungseintrag „PoolIDCConnections“ auf 1. Einzelheiten finden Sie in Kapitel 10, „Konfigurieren von Registrierungseinträgen“.

Password Das Kennwort, das dem Benutzernamen zugeordnet ist. Ist kein Kennwort vergeben, kann dieses Feld weggelassen werden.
RequiredParameters Die Parameternamen (falls vorhanden), deren Übergabe durch den Client Httpodbc.dll überprüft; andernfalls wird ein Fehler geliefert. Parameternamen werden durch Kommata getrennt.
Translationfile Der Pfad zu der Datei, die nichtenglische Zeichen (wie ä, ö, ü, à, ô oder é) so abbildet, daß Browser sie im HTML-Format richtig anzeigen können. Befindet sich die Übersetzungsdatei nicht in demselben Verzeichnis wie die .idc-Datei, müssen Sie den vollständigen Pfad zu der Übersetzungsdatei mit der folgenden Syntax angeben: Translationfile: C:\Verzeichnisname\Dateiname. Verwenden Sie das Feld, wenn Sie eine Datenbank in einer anderen Sprache als Englisch veröffentlichen. Eine Übersetzungsdatei ist eine Textdatei, die für jedes Sonderzeichen eine Zuordnung im Format Wert=Zeichenfolge<CR> enthält, wobei Wert ein internationales Zeichen ist und Zeichenfolge der HTML-Übersetzungscode.
Username Ein gültiger Benutzername für den Datenquellennamen im Feld Datasource.

Anmerkung Wenn Sie Microsoft SQL Server mit der integrierten Sicherheit verwenden, werden die Benutzernamen- und Kennwortfelder in der .idc-Datei nicht ausgewertet. Die Anmeldung am SQL Server erfolgt über die Referenzen des Web-Benutzers. Wird die Anfrage als anonymer Benutzer gestellt, werden Benutzername und Kennwort durch die Einstellungen für den anonymen Benutzer (standardmäßig IUSR_Computer_Name) im Internet-Dienst-Manager bestimmt. Falls die Client-Anforderung Anmeldereferenzen enthält, erfolgt die Anmeldung an SQL Server unter dem vom Endbenutzer angegebenen Benutzernamen und Kennwort.

Content-Type Ein gültiger MIME-Typ, der die Rückgabe an den Client beschreibt. Gewöhnlich ist dies „text/html“, wenn die .htx-Datei HTML enthält.

Weitere optionale ODBC-Felder

Die erweiterten ODBC-Optionen dienen zur Fehlersuche und zur Feinabstimmung des vom Internet-Datenbank-Connector verwendeten ODBC-Treibers. Einzelheiten zu diesen Optionen finden Sie in der ODBC-Treiber-Dokumentation oder im ODBC Software Development Kit (SDK). Das Format in der IDC-Datei lautet folgendermaßen:

ODBCOptions: Optionsname=Wert[,Optionsname=Wert…]

Um beispielsweise die Ausführungszeit einer SQL-Anweisung auf 10 Sekunden zu beschränken und das Verfolgen von ODBC-Funktionsaufrufen zu aktivieren, geben Sie in der IDC-Datei an:

ODBCOptions: SQL_QUERY_TIMEOUT=10, SQL_OPT_TRACE=1, SQL_OPT_TRACEFILE=C:\Sql.log

In der folgenden Tabelle sind alle Optionen zusammengestellt:

Optionsname Wert Funktion
SQL_ACCESS_MODE 0 = Lesen/Schreiben

1 = Nur Lesen

Ein Indikator für den ODBC-Treiber oder die Datenquelle, daß die Verbindung keine SQL-Anweisungen unterstützen muß, die Aktualisierungen veranlassen. Dieser Modus ist hilfreich für die Optimierung von Sperrstrategien, für die Transaktionsverwaltung und andere dem Treiber oder der Datenquelle entsprechende Bereiche. Der Treiber muß nicht verhindern, daß solche Anweisungen an die Datenquelle gesendet werden. Das Verhalten des Treibers und der Datenquelle, wenn sie während einer „Nur Lesen“-Verbindung zur Verarbeitung von nicht nur lesenden SQL-Anweisungen aufgefordert werden, ist implementierungsabhängig. Standardmäßig ist SQL_ACCESS_MODE auf 0 gesetzt, wodurch Lesen und Schreiben zugelassen werden.
SQL_LOGIN_TIMEOUT Ganze Zahl Die Anzahl von Sekunden, innerhalb deren eine Anmeldeanforderung abgeschlossen sein muß, bevor die Verbindung getrennt wird. Der Standardwert ist treiberabhängig und darf nicht 0 sein. Ist der Wert 0, wird die Zeitüberschreitung deaktiviert und ein Verbindungsversuch niemals abgebrochen. Überschreitet die angegebene Zeitschranke die maximale Anmeldezeitschranke in der Datenquelle, setzt der Treiber statt dessen diesen Wert ein.
SQL_OPT_TRACE 0 = Trace aus

1 = Trace ein

Ist das Tracing aktiviert, wird jeder von Httpodbc.dll ausgeführte ODBC-Funktionsaufruf in der Trace-Datei vermerkt. Sie können eine Trace-Datei mit der Option SQL_OPT_TRACEFILE angeben. Ist die Datei bereits vorhanden, hängt ODBC die neuen Daten an die Datei an. Andernfalls wird die Datei erstellt. Ist das Tracing aktiviert, ohne daß eine Trace-Datei angegeben wurde, schreibt ODBC in die Datei SQL.LOG.
SQL_OPT_TRACEFILE Dateiname Der Name der Trace-Datei, die verwendet werden soll, wenn SQL_OPT_TRACE=1 ist. Die Standardeinstellung ist SQL.LOG.
SQL_PACKET_SIZE Ganze Zahl Die Netzwerkpaketgröße in Bytes, die zum Informationsaustausch zwischen dem DBMS (Datenbank-Management-System) und dem Web Server verwendet werden soll.

Anmerkung Zahlreiche Datenquellen unterstützen diese Option nicht oder können nur die Netzwerkpaketgröße liefern. Überschreitet die angegebene Größe die maximale Paketgröße oder ist sie kleiner als die minimale Paketgröße, setzt der Treiber statt dessen diesen Wert ein.

SQL_TRANSLATE_DLL Dateiname Der Name einer DLL, die SQLDriverToDataSource und SQLDataSourceToDriver enthält. Diese Funktionen werden vom Treiber geladen und für Aufgaben wie die Zeichensatzübersetzung verwendet.
SQL_TRANSLATE_OPTION Ganze Zahl Ein Wert, der die spezifische Funktionalität der verwendeten Übersetzungs-DLL steuert. Einzelheiten finden Sie in der Dokumentation für den Treiber und die Übersetzungs-DLL.
SQL_TXN_ISOLATION Ganze Zahl

1=Nicht übergebene Lesevorgänge

2=Übergebene Lesevorgänge

4=Wiederholbare Lesevorgänge

8=Serialisierbar

16=Versioning

Legt die Transaktionsisolationsstufe fest. Der IDC unterstützt keine Transaktionen, die über die Anforderung in der .idc-Datei hinausgehen. Für einige DBMSe bewirkt jedoch das Setzen der Option SQL_TXN_ISOLATION auf 1 („Nicht übergebene Lesevorgänge“) eine höhere Konkurrenz und somit bessere Leistung. Allerdings werden u. U. mit dieser Einstellung Daten abgerufen, die von anderen Transaktionen noch nicht an die Datenbank übergeben wurden.
SQL_MAX_LENGTH Ganze Zahl Der maximale Datenumfang, den der Treiber von einer Zeichen- oder binären Spalte zurückgibt. Die Option dient dazu, die Netzwerklast zu reduzieren und sollte nur eingesetzt werden, wenn die Datenquelle (im Gegensatz zu dem Treiber) in einem Multiple-tier-Treiber diese implementieren kann.
SQL_MAX_ROWS Ganze Zahl Die maximale Zeilenzahl, die für eine SELECT-Anweisung zurückgegeben wird. Ist der Wert 0 (Standard), gibt der Treiber alle Zeilen zurück. Die Option dient dazu, die Netzwerklast zu reduzieren, wenn die Datenquelle selbst die Rückgabezeilen beschränken kann. Im Gegensatz dazu begrenzt die vordefinierte Variable MaxRecords des Internet-Datenbank-Connectors die Anzahl der geholten Zeilen.
SQL_NOSCAN 0=Escape-Klauseln suchen und konvertieren

1= Escape-Klauseln nicht suchen und konvertieren

Gibt an, ob der Treiber SQL-Zeichenfolgen nicht auf Escape-Klauseln durchsuchen soll. Ist der Wert 0 (Standard), durchsucht der Treiber SQL-Zeichenfolgen nach Escape-Klauseln. Ist der Wert 1, durchsucht der Treiber SQL-Zeichenfolgen nicht nach Escape-Klauseln, sondern sendet die Anweisung direkt an die Datenquelle. Enthält Ihre SQL-Anweisung keine ODBC-Escape-Klauseln, führt eine besondere Syntax in geschweiften Klammern ( { } ) und das Setzen der Option auf 1 zu einer geringfügigen Leistungsverbesserung, da der Treiber die SQL-Zeichenfolge dann nicht durchsucht.
SQL_QUERY_TIMEOUT Ganze Zahl

0=Keine Zeitüberschreitung

Die Anzahl von Sekunden, innerhalb deren eine SQL-Anweisung ausgeführt sein muß, bevor die Abfrage abgebrochen wird. Ist der Wert 0 (Standard), gibt es keine Zeitschranke. Überschreitet die angegebene Zeitschranke die maximale Zeitschranke in der Datenquelle oder ist sie kleiner als die minimale Zeitschranke, setzt der Treiber statt dessen diesen Wert ein.
Ganze Zahl treiberspezifisch Treiberspezifische Optionswerte können im Format Zahl=Wert angegeben werden. Beispiel:

4322=1, 234=Zeichenfolge

Verwenden von „Select Multiple“-Listenfeldern in HTML-Formularen

Wenn ein HTML-Formular ein <SELECT MULTIPLE…>-Kennzeichen enthält, konvertiert der Internet-Datenbank-Connector die ausgewählten Elemente in eine durch Kommata getrennte Liste. Diese Liste kann in der .idc-Datei genau wie andere Parameter verwendet werden. Da der Parameter jedoch eine Liste darstellt, wird er gewöhnlich nur für SQLSelect-Anweisungen mit einer IN-Klausel eingesetzt, wie in den nachfolgenden Beispielen erläutert wird.

Ist der Parametername in der .idc-Datei in einfache Anführungszeichen eingeschlossen, wird mit jedem Element der Liste ebenso verfahren. Sie sollten den Parameternamen immer dann in einfache Anführungszeichen setzen, wenn es sich bei der Spalte in der IN-Klausel um eine Zeichenspalte oder um einen anderen Datentyp handelt, bei dem Literale in Anführungszeichen eingeschlossen werden (wie z. B. Daten und Uhrzeiten). Ist der Parametername nicht in einfache Anführungszeichen eingeschlossen, werden auch keine Anführungszeichen um die einzelnen Listenelemente gesetzt. Sie sollten den Parameternamen nicht in einfache Anführungszeichen setzen, wenn es sich bei der Spalte in der IN-Klausel um einen numerischen Datentyp oder um einen anderen Typ handelt, bei dem Literale nicht in Anführungszeichen eingeschlossen werden.

Beispielsweise könnte ein HTML-Formular das folgende Auswahl-Listenfeld enthalten:

<SELECT MULTIPLE NAME="region">
<OPTION VALUE="West">
<OPTION VALUE="Ost">
<OPTION VALUE="Nord">
<OPTION VALUE="Süd">
</SELECT>

Dann können Sie eine .idc-Datei mit der folgenden SQL-Anweisung erstellen:

SQLStatement: SELECT name, region FROM customer WHERE region IN ('%region%')

Falls der Benutzer „Nord“, „West“ und „Ost“ in dem HTML-Formular ausgewählt hat, wird die SQL-Anweisung folgendermaßen konvertiert:

SELECT name, region FROM customer WHERE region IN ('Nord', 'West', 'Ost')

Ein weiteres Beispiel für ein HTML-Formular ist im folgenden aufgeführt. In diesem Fall werden numerische Daten verwendet, daher wird der Parameter in der . idc-Datei nicht in Anführungszeichen gesetzt.

<SELECT MULTIPLE NAME="jahr">
<OPTION VALUE="1994">
<OPTION VALUE="1995">
<OPTION VALUE="1996">
</SELECT>

Sie können eine .idc-Datei mit der folgenden SQL-Anweisung erstellen:

SQLStatement: SELECT produkt, geschäftssjahr FROM Verkäufe WHERE geschäftsjahr IN (%jahr%)

Falls der Benutzer „1994“ und „1995“ in dem HTML-Formular ausgewählt hat, wird die SQL-Anweisung folgendermaßen konvertiert:

SELECT produkt, geschäftssjahr FROM Verkäufe WHERE geschäftsjahr IN (1994, 1995)

Verwenden von Stapelabfragen und Mehrfachabfragen

In einer .idc-Datei können SQL-Abfragen auf zwei Arten zusammengefaßt werden: als Stapelabfragen oder als Mehrfachabfragen.

Stapelabfragen

Wenn Sie Datenbanken abfragen, die gleichzeitig mehrere Abfragen in einer SQL-Anweisung verarbeiten können (wie eine SQL Server-Datenbank), sollten Sie Ihre Anweisungen in der Stapelabfragesyntax formulieren, um die bestmögliche Leistung zu erzielen. Beispiel:

SQLSTatement:
+insert into perf(testtime, tag) values (getdate(), '%tag%')
+SELECT au_lname, ytd_sales from pubs.dbo.titleview where ytd_sales>5000
+SELECT count(*) as nrecs from pubs.dbo.titleview where ytd_sales>5000

Mehrfachabfragen

Wenn Sie Datenbanken abfragen, die nicht in der Lage sind, gleichzeitig mehrere SQL-Abfragen zu verarbeiten, sollten Sie Ihre Anweisungen als Mehrfachabfragen formulieren. Beispiel:

SQLStatement:
+insert into perf(testtime, tag) values (getdate(), '%tag%')
SQLStatement:
+SELECT au_lname, ytd_sales from pubs.dbo.titleview where ytd_sales>5000
SQLStatement:
+SELECT count(*) as nrecs from pubs.dbo.titleview where ytd_sales>5000

Stapelabfragen werden zusammen verarbeitet, während Mehrfachabfragen nacheinander abgearbeitet werden. Daher führt die Formulierung von Abfragen als Stapel zu einer schnelleren Verarbeitung, sofern Ihre Datenbank Stapelabfragen zuläßt.

HTML-Erweiterungsdateien (.htx)

HTML-Erweiterungsdateien enthalten eine Reihe von Schlüsselwörtern, die den Aufbau des ausgegebenen HTML-Dokuments steuern. Diese Schlüsselwörter werden in den nachfolgenden Abschnitten erläutert.

<%begindetail%>, <%enddetail%>

Die Schlüsselwörter <%begindetail%> und <%enddetail%> umschließen einen Abschnitt der HTML-Erweiterungsdatei, in den die Datenausgabe aus der Datenbank eingefügt wird. In diesem Abschnitt geben die Spaltennamen, begrenzt durch <% und %> oder <!--%%-->, die Position der zurückgelieferten Daten aus der Abfrage an. Beispiel:

<%begindetail%>
<%au_lname%>: <%ytd_sales%>
<%enddetail%>

In diesem Fall werden die Spalten au_lname und ytd_sales aufgeführt. Auf diese Weise können Sie jede beliebige Spalte angeben. Spaltennamen können ebenso an jeder anderen Stelle der HTML-Erweiterungsdatei angeführt werden.

Anmerkung   Liefert die Abfrage keine Datensätze, wird der <%begindetail%>-<%enddetail%>-Abschnitt übersprungen. Für jede SQL-Anweisung, die eine Ergebnismenge erzeugt (z. B. SELECT), muß die .htx-Datei einen entsprechenden <%begindetail%>-<%enddetail%>-Abschnitt enthalten.

<%if%>, <%else%>, <%endif%>

HTML-Erweiterungsdateien können Bedingungen in einer if-then-else-Anweisung enthalten, durch die der Aufbau der Web-Seite gesteuert wird. Beispielsweise wird häufig eine Bedingung eingefügt, die das Abfrageergebnis in der ersten Zeile eines <%begindetail%>-Abschnitts ausgibt; falls die Abfrage jedoch keine Datensätze liefert, wird der Text „Leider hat kein Autor einen Jahresumsatz größer %idc.sales%“ angezeigt. Mit der <%if%>-Anweisung und der vordefinierten Variablen CurrentRecord können Sie die Ausgabe so formatieren, daß die Fehlermeldung gedruckt wird, wenn keine Datensätze geliefert werden. Das folgende Beispiel verdeutlicht den Einsatz der <%if%>-Anweisung.

<%begindetail%><%if CurrentRecord EQ 0 %>

Abfrageergebnisse:

<B>Autor Jahresumsatz<BR></B>
<%endif%>
<%au_lname%>
<%ytd_sales%>
<%enddetail%>
<P>
<%if CurrentRecord EQ 0 %>
<I><B> Leider hat kein Autor einen Jahresumsatz größer </I><%idc.sales%>.</B>
<P>
<%else%>
<HR>
<I>
Die hier dargestellte Web-Seite wurde zusammengefügt aus den Ergebnissen der SQL-Abfrage und der Vorlagedatei Sample.htx.
<P>
Die Zusammenfügung wurde vom Microsoft Internet-Datenbank-Connector vorgenommen, und die Ergebnisse wurden durch Microsoft Internet Information Server an diesen Web Browser gesendet.
</I>
<%endif%>

</BODY>
</HTML>

Die allgemeine Syntax lautet:

<%if Bedingung %>
HTML-Text
[<%else%>
HTML-Text]
<%endif%>

Dabei hat Bedingung die Form:

und Operator kann einer der folgenden sein:

EQ Wert1 gleich Wert2
LT Wert1 kleiner Wert2
GT Wert1 größer Wert2
CONTAINS ein Teil von Wert1 enthält die Zeichenfolge Wert2

Bei den Operanden Wert1 und Wert2 kann es sich um Spaltennamen handeln, um eine der vordefinierten Variablen (CurrentRecord oder MaxRecords, siehe weiter unten), einen HTTP-Variablennamen (siehe im folgenden) oder eine Konstante. Innerhalb einer <%if%>-Anweisung werden Werte nicht durch <% und %> begrenzt. Um beispielsweise eine besondere Verarbeitung für den Autorennamen „Green“ anzugeben, verwenden Sie folgende Bedingung:

<%begindetail%>
<%if au_lname EQ "Green"%>
Hier kommt ein Grüner!
<%endif%>
<%enddetail%>

Die <%if%>-Anweisung kann auch dazu eingesetzt werden, eine besondere Verarbeitung von Informationen in HTTP-Variablen abhängig zu machen. Um beispielsweise eine Seite je nach dem Typ des Client-Web-Browsers unterschiedlich zu formatieren, könnten Sie folgende Bedingung in die HTML-Erweiterungsdatei aufnehmen:

<%if HTTP_USER_AGENT contains "Mozilla"%>
Client unterstützt erweiterte HTML-Merkmale
<%else%>
Client ist <%HTTP_USER_AGENT%>
<%endif%>

CurrentRecord, MaxRecords

Die vordefinierte Variable CurrentRecord gibt an, wie oft der <%begindetail%>-Abschnitt verarbeitet wurde. Beim ersten Durchgang des <%begindetail%>-Abschnitts ist der Wert 0. Anschließend erhöht sich der Wert von CurrentRecord jedesmal, wenn ein weiterer Datensatz aus der Datenbank geholt wird.

Die vordefinierte Variable MaxRecords enthält den Wert des Feldes MaxRecords aus der Internet-Datenbank-Connector-Datei. MaxRecords und CurrentRecord können nur in <%if%>-Anweisungen verwendet werden.

Parameter aus Internet-Datenbank-Connector-Dateien

Auf Parameter aus Internet-Datenbank-Connector-Dateien kann in der HTML-Erweiterungsdatei zugegriffen werden, indem dem Parameternamen „idc“ und ein Punkt vorangestellt wird. In der weiter oben erläuterten Datei Sample3.htx könnte der Wert des Parameters %sales% über folgende Zeile ausgegeben werden:

Der Parameter sales hat folgenden Wert: <%idc.sales%>

HTTP-Variablen

Eine Reihe von Variablen in HTML-Erweiterungsdateien liefern umfangreiche Informationen über die Umgebung und den mit dem Server verbundenen Web-Client. Daneben sind alle vom Client gesendeten Header verfügbar. Um mit dem Internet-Datenbank-Connector darauf zugreifen zu können, müssen Sie sie folgendermaßen konvertieren:


In der folgenden Tabelle sind die Standardvariablen aufgeführt. Es handelt sich um Umgebungsvariablen für CGI-Anwendungen und HTTP-Variablen für IDC-Anwendungen.

Server-Variablen von Internet Information
Variable Bedeutung
ALL_HTTP Alle HTTP-Header, die noch nicht in eine der aufgeführten Variablen zerlegt wurden. Diese Variablen haben das Format HTTP_<Headerfeldname>. Beispiel:

HTTP_ACCEPT: */*, q=0.300, audio/x-aiff, audio/basic, image/jpeg, image/gif, text/plain, text/html

HTTP_USER_AGENT: Microsoft Internet Explorer/0.1 (Win32)

HTTP_REFERER: http://webserver/samples/dbsamp/dbsamp3.htm

HTTP_CONTENT_TYPE: application/x-www-form-urlencoded

HTTP_CONTENT_LENGTH: 10

AUTH_TYPE Die verwendete Art der Echtheitsbestätigung. Wurde der Benutzername vom Server bestätigt, enthält die Variable den Wert Basic. Andernfalls ist sie nicht vorhanden.
CONTENT_LENGTH Die Anzahl von Bytes, die das Skript erwarten kann, vom Client zu empfangen.
CONTENT_TYPE Der Inhaltstyp der Informationen, die im Rumpf einer POST-Anforderung bereitgestellt werden.
GATEWAY_INTERFACE Die Fassung der CGI (Common Gateway Interface)-Spezifikation, der dieser Server entspricht.
HTTP_ACCEPT Spezieller HTTP-Header. Werte des Accept:-Feldes werden, durch Kommata getrennt, aneinandergehängt. Sind z. B. die folgenden Zeilen Teil eines HTTP-Headers:

accept: */*; q=0.1

accept: text/html
accept: image/jpeg

hat die Variable HTTP_ACCEPT folgenden Wert:

*/*; q=0.1, text/html, image/jpeg
LOGON_USER Das Windows NT-Konto des Benutzers.
PATH_INFO Zusätzliche Pfadinformationen, die vom Client angegeben wurden. Diese umfassen den abschließenden URL-Teil hinter dem Skriptnamen, jedoch vor der Abfrage (sofern vorhanden).
PATH_TRANSLATED Der Wert von PATH_INFO, nachdem ein eventuell vorhandener virtueller Pfadname in eine Verzeichnisangabe expandiert wurde.
QUERY_STRING Die Informationen hinter dem Fragezeichen (?) in dem URL, der auf dieses Skript verwiesen hat.
REMOTE_ADDR Die IP-Adresse des Clients.
REMOTE_HOST Der Host-Name des Clients.
REMOTE_USER Der Benutzername, der vom Client angegeben und vom Server bestätigt wurde.
REQUEST_METHOD Die HTTP-Anforderungsmethode.
SCRIPT_NAME Der Name des gerade ausgeführten Skriptprogramms.
SERVER_NAME Der Host-Name des Servers (oder seine IP-Adresse), wie er in auf sich selbst verweisenden URLs anzugeben ist.
SERVER_PORT Der TCP/IP-Anschluß, an dem die Anforderung empfangen wurde.
SERVER_PORT_SECURE Der Wert 0 oder 1. Der Wert 1 gibt an, daß die Anforderung an dem verschlüsselten Anschluß liegt.
SERVER_PROTOCOL Der Name und die Version des Informationsgewinnungsprotokolls, auf das sich diese Anforderung bezieht; in der Regel HTTP/1.0.
SERVER_SOFTWARE Der Name und die Version des Web Servers, unter der die Internet Server-Erweiterung ausgeführt wird.
URL Der URL der Anforderung.


Inhalt Index Vorheries Kapitel Anfang Nächstes Kapitel

© 1996 Microsoft Corporation. Alle Rechte vorbehalten.