ASP-Vorlesungsreihe (16) Zugriff auf die Datenbank
Autor:Eve Cole
Aktualisierungszeit:2009-05-30 19:58:46
ActiveX Data Objects (ADO) ist eine benutzerfreundliche und erweiterbare Technologie zum Hinzufügen von Datenbankzugriff auf Webseiten. Mit ADO können Sie kompakte und prägnante Skripts schreiben, um eine Verbindung zu Open Database Connectivity (ODBC)-kompatiblen Datenbanken und OLE DB-kompatiblen Datenquellen herzustellen. Wenn Sie ein Skripter sind und sich mit Datenbankverbindungen auskennen, werden Sie feststellen, dass ADO-Befehlsanweisungen nicht kompliziert und leicht zu beherrschen sind. Wenn Sie ein erfahrener Datenbankprogrammierer sind, werden Sie ebenfalls die fortschrittlichen Sprachunabhängigkeits- und Abfrageverarbeitungsfunktionen von ADO zu schätzen wissen.
Erstellen der ODBC-DSN-Datei Bevor Sie das Datenbankskript erstellen, müssen Sie ADO eine Möglichkeit bereitstellen, die Datenbank zu finden, zu identifizieren und mit ihr zu kommunizieren. Der Datenbanktreiber verwendet einen Datenquellennamen (Data Source Name, DSN), um eine bestimmte ODBC-kompatible Datenbank zu finden und zu identifizieren, um Informationen von der Webanwendung an die Datenbank weiterzuleiten. Normalerweise enthält ein DSN Informationen zur Datenbankkonfiguration, zur Benutzersicherheit und zum Standort und kann als Tabelle in einem Windows NT-Registrierungsschlüssel oder als Textdatei abgerufen werden.
Mit ODBC können Sie den DSN-Typ auswählen, den Sie erstellen möchten: Benutzer, System oder Datei. Benutzer- und System-DSNs werden in der Windows NT-Registrierung gespeichert. Der System-DSN ermöglicht allen an einem bestimmten Server angemeldeten Benutzern den Zugriff auf die Datenbank, während der Benutzer-DSN Datenbankverbindungen auf bestimmte Benutzer mit entsprechenden Sicherheitsanmeldeinformationen beschränkt. Datei-DSN wird zum Abrufen von Tabellen aus Textdateien verwendet, bietet mehreren Benutzern Zugriff und kann durch Kopieren der DSN-Datei problemlos von einem Server auf einen anderen übertragen werden. Aus diesen Gründen verwenden die Beispiele in diesem Thema Datei-DSNs.
Sie können DSN-basierte Dateien erstellen, indem Sie die Systemsteuerung im Windows-Startmenü öffnen. Doppelklicken Sie auf das ODBC-Symbol, wählen Sie die Eigenschaftenseite „Datei-DSN“ aus, klicken Sie auf „Hinzufügen“, wählen Sie den Datenbanktreiber aus und klicken Sie auf „Weiter“. Befolgen Sie die nachstehenden Anweisungen, um den DSN für Ihre Datenbanksoftware zu konfigurieren.
Konfigurieren des Datei-DSN für die Microsoft Access-Datenbank
Wählen Sie im Dialogfeld „Neue Datenquelle erstellen“ im Listenfeld den Eintrag „Microsoft Access-Treiber“ aus und klicken Sie dann auf „Weiter“.
Geben Sie Ihren DSN-Dateinamen ein und klicken Sie auf Weiter.
Klicken Sie auf Fertig stellen, um die Datenquelle zu erstellen.
Klicken Sie im Dialogfeld „ODBC Microsoft Access 97 Setup“ auf „Auswählen“. Wählen Sie die Microsoft Access-Datenbankdatei (*.mdb) aus und klicken Sie auf OK.
HINWEIS Aus Leistungs- und Zuverlässigkeitsgründen empfehlen wir dringend, dass Sie eine Client-Server-Datenbank-Engine verwenden, um Daten zu konfigurieren, die von Webanwendungen gesteuert werden, auf die mehr als 10 Benutzer gleichzeitig zugreifen müssen. Obwohl ASP jede ODBC-kompatible Datenbank verwenden kann, ist es für die Verwendung mit Client-Server-Datenbanken, einschließlich Microsoft ® SQL Server, Oracle und anderen, konzipiert und rigoros getestet.
ASP unterstützt gemeinsam genutzte Dateidatenbanken (wie Microsoft Access oder FoxPro) als gültige Datenquellen. Obwohl einige Beispiele in der ASP-Dokumentation gemeinsam genutzte Dateidatenbanken verwenden, empfehlen wir die Verwendung solcher Datenbank-Engines nur für Entwicklungs- oder begrenzte Bereitstellungsszenarien. Gemeinsam genutzte Dateidatenbanken eignen sich möglicherweise nicht gut für Client-Server-Datenbanken, die für Webanwendungen mit hoher Nachfrage und hoher Qualität geeignet sind.
Konfigurieren Sie den DSN der SQL Server-Datenbankdatei
Hinweis Wenn sich die Datenbank auf einem Remote-Server befindet, wenden Sie sich an den Serveradministrator, um weitere Konfigurationsinformationen zu erhalten. Das folgende Verfahren verwendet die ODBC-Standardeinstellungen von SQL Server, die möglicherweise nicht auf Ihre Hardwarekonfiguration zutreffen.
Wählen Sie im Dialogfeld „Neue Datenquelle erstellen“ im Listenfeld „SQL Server“ aus und klicken Sie dann auf „Weiter“.
Geben Sie einen Namen für die DSN-Datei ein und klicken Sie auf Weiter.
Klicken Sie auf Fertig stellen, um die Datenquelle zu erstellen.
Geben Sie den Namen, die Anmelde-ID und das Kennwort des Servers ein, auf dem das SQL-Dienstprogramm ausgeführt wird.
Geben Sie im Dialogfeld „Neue Datenquelle für SQL Server erstellen“ den Namen des Servers ein, der die SQL Server-Datenbank im Listenfeld „Server“ enthält, und klicken Sie dann auf „Weiter“.
Wählen Sie aus, wie Sie Ihre Anmelde-ID überprüfen möchten.
Wenn Sie sich für die SQL-Server-Authentifizierung entscheiden, geben Sie eine Anmelde-ID und ein Kennwort ein und klicken Sie auf Weiter.
Legen Sie im Dialogfeld „Neue Datenquelle für SQL Server erstellen“ die Standarddatenbank, den Treiber für gespeicherte Prozedureinstellungen und die ANSI-Identifikation fest und klicken Sie dann auf „Weiter“. (Für weitere Informationen klicken Sie auf Hilfe.)
Wählen Sie im Dialogfeld (auch „Neue Datenquelle für SQL Server erstellen“) eine Zeichenkonvertierungsmethode aus und klicken Sie dann auf „Weiter“. (Für weitere Informationen klicken Sie auf Hilfe.)
Wählen Sie im nächsten Dialogfeld (auch „Neue Datenquelle für SQL Server erstellen“) die Anmeldeeinstellungen aus.
Hinweis Normalerweise können Sie Protokolle nur zum Debuggen von Datenbankzugriffsproblemen verwenden.
Klicken Sie im Dialogfeld „ODBC-Microsoft-SQL-Server-Setup“ auf „Datenquelle testen“. Wenn der DSN korrekt erstellt wurde, zeigt das Dialogfeld „Testergebnisse“ an, dass der Test erfolgreich abgeschlossen wurde.
SQL Server-Verbindungs- und Sicherheitsinformationen Wenn Sie eine ASP-Datenbankanwendung entwickeln, die eine Verbindung zu einer Remote-SQL Server-Datenbank herstellt, sollten Sie die folgenden Probleme berücksichtigen:
Verbindungsoptionen – Sie können zwischen TCP/IP-Sockets und Named Pipes wählen, um auf die Remote-SQL-Server-Datenbank zuzugreifen. Da bei der Verwendung benannter Pipes der Datenbankbenutzer bei Windows NT authentifiziert werden muss, bevor eine Verbindung hergestellt werden kann, wird Benutzern mit entsprechenden SQL Server-Zugriffsidentitäten, aber ohne Windows NT-Benutzerkonto auf dem Computer möglicherweise der Zugriff auf die benannte Pipe verweigert. Alternativ kann eine Verbindung über TCP/IP-Sockets direkt mit dem Datenbankserver verbunden werden, ohne dass ein zwischengeschalteter Computer über Named Pipes verwendet werden muss. Da Sie über eine TCP/IP-Socket-Verbindung eine direkte Verbindung zum Datenbankserver herstellen können, können Benutzer über die SQL Server-Authentifizierung Zugriff erhalten, ohne sich über Windows NT authentifizieren zu müssen.
Hinweis: Die Verwendung von TCP/IP-Sockets kann die Leistung beim Herstellen einer Verbindung zu Remote-Datenbanken verbessern.
Sicherheit – Wenn Sie die integrierten oder gemischten Sicherheitsfunktionen von SQL Server verwenden und sich die SQL Server-Datenbank auf einem Remoteserver befindet, können Sie die Anforderungs-/Antwortbestätigung von Windows NT nicht verwenden. Das heißt, die Windows NT-Anforderungs-/Antwort-ID kann nicht an den Remotecomputer weitergeleitet werden, sondern es kann nur die Standardauthentifizierung verwendet werden, die auf den Benutzernamen- und Kennwortinformationen des Benutzers basiert.
Weitere Informationen zu diesem Thema finden Sie unter http://www.microsoft.com/sqlsupport/
Homepage des technischen Supports für Microsoft SQL Server.
Konfigurieren Sie den DSN der Oracle-Datenbankdatei
Stellen Sie zunächst sicher, dass die Oracle-Benutzersoftware ordnungsgemäß auf dem Computer installiert ist, auf dem der DSN erstellt werden soll. Weitere Informationen erhalten Sie von Ihrem Serveradministrator oder in der Dokumentation Ihrer Datenbanksoftware.
Wählen Sie im Dialogfeld „Neue Datenquelle erstellen“ im Listenfeld „Microsoft ODBC für Oracle“ aus und klicken Sie dann auf „Weiter“.
Geben Sie einen Namen für die DSN-Datei ein und klicken Sie auf Weiter.
Klicken Sie auf Fertig stellen, um die Datenquelle zu erstellen.
Geben Sie Ihren Benutzernamen, Ihr Passwort und Ihren Servernamen ein und klicken Sie auf OK.
Hinweis DSN-Dateien haben die Erweiterung .dsn und befinden sich im Verzeichnis ProgrammeGemeinsame DateienODBCData Sources.
Weitere Informationen zum Erstellen von DSN-Dateien finden Sie auf der Microsoft ODBC-Website: http://microsoft.com/odbc/.
Herstellen einer Verbindung zur Datenbank Der erste Schritt beim Zugriff auf Datenbankinformationen besteht darin, eine Verbindung zur Datenbankquelle herzustellen. ADO stellt ein Connection-Objekt bereit, mit dem Verbindungen zwischen Anwendungen und ODBC-Datenbanken hergestellt und verwaltet werden können. Das Connection-Objekt verfügt über verschiedene Eigenschaften und Methoden, mit denen Sie Datenbankverbindungen öffnen und schließen und Abfrageanforderungen zum Aktualisieren von Informationen stellen können.
Um eine Datenbankverbindung herzustellen, erstellen Sie zunächst eine Instanz des Connection-Objekts. Das folgende Skript erstellt beispielsweise ein Connection-Objekt und öffnet dann eine Datenbankverbindung:
<%
'Erstellen Sie ein Verbindungsobjekt
Setze cn = Server.CreateObject("ADODB.Connection")
'Öffnen Sie eine Verbindung; die Zeichenfolge bezieht sich auf den DSN
cn.Öffnen Sie „FILEDSN=MyDatabase.dsn“
%>
Hinweis Die DSN-Zeichenfolge darf weder vor noch nach dem Gleichheitszeichen (=) Leerzeichen enthalten.
In diesem Fall verweist die Open-Methode des Connection-Objekts auf eine DSN-basierte Datei, die Standort- und Konfigurationsinformationen zur Datenbank enthält. Sie können auch explizit auf den Anbieter, die Datenquelle, die Benutzer-ID und das Kennwort verweisen, ohne auf den DSN zu verweisen.
Ausführen einer Abfrage mit einem Verbindungsobjekt Mit der Execute-Methode des Verbindungsobjekts können Sie eine SQL-Abfrage (Structured Query Language) an eine Datenbankquelle senden und die Ergebnisse abrufen. SQL ist die Industriestandardsprache für die Kommunikation mit Datenbanken und verfügt über zahlreiche Befehle zum Abrufen und Aktualisieren von Informationen.
Das folgende Skript verwendet die Execute-Methode des Connection-Objekts, um mithilfe eines SQL-INSERT-Befehls eine Abfrage in einer Tabelle auszugeben, die Daten in eine bestimmte Datenbanktabelle einfügt. Im folgenden Beispiel fügt das Skript den Namen Jose Lugo in eine Datenbanktabelle mit dem Namen „Customers“ ein.
<%
'Dateibasierten DSN definieren
strDSN = „FILEDSN=MyDatabase.dsn“
'Instanziieren Sie das Connection-Objekt und öffnen Sie eine Datenbankverbindung
Setze cn = Server.CreateObject("ADODB.Connection")
cn.StrDSN öffnen
'Definieren Sie die SQL SELECT-Anweisung
strSQL = "INSERT INTO Customers (FirstName, LastName) VALUES ('Jose','Lugo')"
„Verwenden Sie die Execute-Methode, um eine SQL-Abfrage an die Datenbank zu senden
cn.Execute(strSQL)
%>
Beachten Sie, dass Dateien, die auf DSN-Pfadzeichenfolgen basieren, keine Leerzeichen vor und nach dem Gleichheitszeichen (=) enthalten sollten.
Zusätzlich zum SQL-Befehl INSERT können Sie auch die SQL-Befehle UPDATE und DELETE verwenden, um Datenbankinformationen zu ändern und zu löschen.
Mit dem SQL UPDATE-Befehl können Sie den Wert jedes Elements in der Datenbanktabelle ändern. Das folgende Skript verwendet den UPDATE-Befehl, um das Feld „FirstName“ jedes Datensatzes in der Tabelle „Customers“ zu ändern, dessen Feld „LastName“ den Nachnamen „Smith“ in „Jeff“ enthält.
<%
Setze cn = Server.CreateObject("ADODB.Connection")
cn.Öffnen Sie „FILEDSN=MyDatabase.dsn“
cn.Execute „UPDATE Customers SET FirstName = ‚Jeff‘ WHERE LastName = ‚Smith‘“
%>
Um bestimmte Datensätze aus einer Datenbanktabelle zu löschen, verwenden Sie den SQL-Befehl DELETE. Das folgende Skript löscht alle Zeilen mit dem Nachnamen Smith aus der Tabelle „Kunden“:
<%
Setze cn = Server.CreateObject("ADODB.Connection")
cn.Öffnen Sie „FILEDSN=MyDatabase.dsn“
cn.Execute „DELETE FROM Customers WHERE LastName = ‚Smith‘“
%>
Hinweis Sie müssen bei der Verwendung des SQL-Befehls DELETE Vorsicht walten lassen. Wenn Sie den DELETE-Befehl ohne WHERE-Klausel verwenden, werden alle Zeilen in der Tabelle gelöscht. Stellen Sie sicher, dass Sie die SQL-WHERE-Klausel einschließen, um die genauen Zeilen anzugeben, die gelöscht werden sollen.
Verwenden von Recordset-Objekten zum Verarbeiten von Ergebnissen Obwohl das Connection-Objekt das Herstellen einer Verbindung zu einer Datenbank und das Abfragen vereinfacht, weist das Connection-Objekt dennoch viele Mängel auf. Insbesondere kann das Connection-Objekt, das Datenbankinformationen abruft und anzeigt, nicht zum Erstellen von Skripts verwendet werden. Sie müssen genau wissen, welche Änderungen Sie an der Datenbank vornehmen möchten, bevor Sie Abfragen zum Implementieren der Änderungen verwenden können.
Zum Abrufen von Daten, Überprüfen von Ergebnissen und Ändern der Datenbank stellt ADO Recordset-Objekte bereit. Wie der Name schon sagt, verfügt das Recordset-Objekt über eine Reihe von Funktionen, mit denen Sie basierend auf den Einschränkungen Ihrer Abfrage eine Reihe von Datenbankzeilen oder „Datensätzen“ abrufen und anzeigen können. Ein Recordset-Objekt speichert den Speicherort der von einer Abfrage zurückgegebenen Datensätze, sodass Sie die Ergebnisse einzeln durchgehen können.
Abhängig von der PointerType-Eigenschaftseinstellung des Recordset-Objekts können Sie einen Bildlauf durchführen und Datensätze aktualisieren. Mithilfe von Datenbankzeigern können Sie ein bestimmtes Element innerhalb einer Reihe von Datensätzen lokalisieren. Zeiger werden auch verwendet, um Datensätze abzurufen und zu untersuchen und dann auf diesen Datensätzen basierende Vorgänge auszuführen. Recordset-Objekte verfügen über Eigenschaften, mit denen Sie das Verhalten von Zeigern präzise steuern und so Ergebnisse besser prüfen und aktualisieren können. Sie können beispielsweise die Eigenschaften CursorType und CursorLocation verwenden, um den Typ eines Zeigers festzulegen, die Ergebnisse an die Clientanwendung zurückzugeben (die Ergebnisse werden normalerweise auf dem Datenbankserver gespeichert) und die letzten von anderen Benutzern an der Datenbank vorgenommenen Änderungen anzuzeigen .
Abrufen von Datensätzen Eine erfolgreiche Datenbankanwendung verwendet das Connection-Objekt zum Herstellen der Verbindung und das Recordset-Objekt zum Verarbeiten der zurückgegebenen Daten. Durch die „Koordinierung“ der spezifischen Funktionalität zweier Objekte können Sie eine Datenbankanwendung entwickeln, die nahezu jede Datenverarbeitungsaufgabe ausführen kann. Das folgende serverseitige Skript verwendet beispielsweise ein Recordset-Objekt, um einen SQL-SELECT-Befehl auszuführen. Der SELECT-Befehl ruft eine Reihe von Informationen basierend auf Abfrageeinschränkungen ab. Die Abfrage enthält außerdem eine SQL-WHERE-Klausel, mit der der Umfang der Abfrage eingeschränkt wird. In diesem Beispiel beschränkt die WHERE-Klausel die Abfrage auf alle Datensätze, die den Nachnamen Smith in der Datenbanktabelle „Customers“ enthalten.
<%
'Stellen Sie eine Verbindung mit der Datenquelle her
strDSN = „FILEDSN=MyDatabase.dsn“
Setze cn = Server.CreateObject("ADODB.Connection")
cn.StrDSN öffnen
'Instanziieren Sie ein Recordset-Objekt
Setze rsCustomers = Server.CreateObject("ADODB.Recordset")
'Öffnen Sie ein Recordset mit der Open-Methode
' und verwenden Sie die vom Connection-Objekt hergestellte Verbindung
strSQL = "SELECT FirstName, LastName FROM Customers WHERE LastName = 'Smith' "
rsCustomers.Open strSQL, cn
'Durchlaufen Sie den Datensatz und zeigen Sie die Ergebnisse an
' und die Datensatzposition mit der MoveNext-Methode erhöhen
Setze objFirstName = rsCustomers("FirstName")
Setze objLastName = rsCustomers("LastName")
Tun bis rsCustomers.EOF
Response.Write objFirstName & " " & objLastName & "<BR>"
rsCustomers.MoveNext
Schleife
%>
Beachten Sie, dass im vorherigen Beispiel das Connection-Objekt zum Herstellen der Datenbankverbindung und das Recordset-Objekt die Verbindung zum Abrufen von Ergebnissen aus der Datenbank verwendet wurde. Diese Methode ist nützlich, wenn Sie genau festlegen müssen, wie eine Verbindung zur Datenbank hergestellt wird. Wenn Sie beispielsweise angeben müssen, wie lange gewartet werden soll, bevor ein Verbindungsversuch fehlschlägt, müssen Sie das Connection-Objekt verwenden, um Eigenschaften festzulegen. Wenn Sie jedoch nur eine Verbindung mithilfe der Standardverbindungseigenschaften von ADO herstellen möchten, sollten Sie die Open-Methode des Recordset-Objekts verwenden, um die Verbindung herzustellen:
<%
strDSN = „FILEDSN=MyDatabase.dsn“
strSQL = "SELECT FirstName, LastName FROM Customers WHERE LastName = 'Smith' "
Setze rsCustomers = Server.CreateObject("ADODB.Recordset")
'Öffnen Sie eine Verbindung mit der Open-Methode
'und verwenden Sie die vom Connection-Objekt hergestellte Verbindung
rsCustomers.Open strSQL, strDSN
„Durchlaufen Sie den Datensatz, zeigen Sie die Ergebnisse an,
' und die Datensatzposition mit der MoveNext-Methode erhöhen
Setze objFirstName = rsCustomers("FirstName")
Setze objLastName = rsCustomers("LastName")
Tun bis rsCustomers.EOF
Response.Write objFirstName & " " & objLastName & "<BR>"
rsCustomers.MoveNext
Schleife
%>
Wenn Sie zum Herstellen einer Verbindung die Open-Methode des Recordset-Objekts verwenden, muss das Connection-Objekt verwendet werden, um die Sicherheit der Verbindung sicherzustellen.
Verwenden des Command-Objekts zur Verbesserung von Abfragen Mit dem ADO-Command-Objekt können Sie Abfragen genauso ausführen wie mit den Connection- und Recordset-Objekten. Der einzige Unterschied besteht darin, dass Sie mit dem Command-Objekt Ihre Abfrage in der Datenbank vorbereiten, kompilieren und iterieren können Quelle mit einem anderen Wertesatz. Stellen Sie eine Anfrage. Der Vorteil der Kompilierung von Abfragen auf diese Weise besteht darin, dass Sie die Zeit minimieren können, die für die wiederholte Ausgabe geänderter Anforderungen an vorhandene Abfragen erforderlich ist. Alternativ können Sie eine SQL-Abfrage vor der Ausführung teilweise undefiniert lassen, indem Sie Optionen für den variablen Teil Ihrer Abfrage verwenden.
Die Parametersammlung des Command-Objekts erspart Ihnen die Mühe, die Abfrage jedes Mal neu zu erstellen, wenn sie erneut ausgegeben wird. Wenn Sie beispielsweise die Angebots- und Preisinformationen in einem bestandsbasierten Websystem regelmäßig aktualisieren müssen, können Sie die Abfrage wie folgt vordefinieren:
<%
'Öffnen Sie eine Verbindung mit dem Verbindungsobjekt Befehlsobjekt
'verfügt nicht über eine Open-Methode zum Herstellen einer Verbindung
strDSN = „FILEDSN=MyDatabase.dsn“
Setze cn = Server.CreateObject("ADODB.Connection")
cn.StrDSN öffnen
„Befehlsobjekt instanziieren; ActiveConnection-Eigenschaft zum Anhängen verwenden.“
'Verbindung zum Command-Objekt
Setze cm= Server.CreateObject("ADODB.Command")
Legen Sie cm.ActiveConnection = cn fest
'SQL-Abfrage definieren
cm.CommandText = „INSERT INTO Inventory (Material, Quantity) VALUES (?, ?)“
'Speichern Sie eine vorbereitete (oder vorkompilierte) Version der in CommandText angegebenen Abfrage
'Eigenschaft vor der ersten Ausführung eines Command-Objekts.
cm.Prepared = True
'Definieren Sie die Konfigurationsinformationen für Abfrageparameter
cm.Parameters.Append cm.CreateParameter("material_type",200, ,255 )
cm.Parameters.Append cm.CreateParameter("quantity",200, ,255 )
'Erste Einfügung definieren und ausführen
cm("material_type") = "Glühbirnen"
cm("Menge") = "40"
cm.Ausführen
'Zweite Einfügung definieren und ausführen
cm("material_type") = "Sicherungen"
cm("Menge") = "600"
cm.Ausführen
%>
Schauen Sie sich das obige Beispiel an und Sie werden feststellen, dass das Skript wiederholt eine SQL-Abfrage mit unterschiedlichen Werten erstellt und ausgibt, ohne die Abfrage neu zu definieren und erneut an die Datenbankquelle zu senden. Das Kompilieren von Abfragen mit Command-Objekten vermeidet außerdem Probleme beim Zusammenführen von Zeichenfolgen- und Tabellenvariablen, die durch SQL-Abfragen verursacht werden. Insbesondere Probleme im Zusammenhang mit der Definition der Typen von Zeichenfolgen-, Datums- und Zeitvariablen können durch die Verwendung der Parametersammlung des Command-Objekts vermieden werden. Beispielsweise kann ein SQL-Abfragewert, der „'“ enthält, dazu führen, dass die Abfrage fehlschlägt:
strSQL = "INSERT INTO Customers (FirstName, LastName) VALUES ('Robert','O'Hara')"
Beachten Sie, dass der Nachname O'Hara ein „‘“ enthält, das mit dem „‘“ in Konflikt steht, das zur Darstellung von Daten im SQL-Schlüsselwort VALUES verwendet wird. Diese Art von Problem kann vermieden werden, indem der Abfragewert als Befehlsobjektparameter gebunden wird.
Kombinieren von HTML-Tabellen und Datenbanken Durch den Zugriff auf eine Webseite mit einer HTML-Tabelle können Benutzer eine Datenbank aus der Ferne abfragen und bestimmte Informationen abrufen. Mit ADO können Sie sehr einfache Skripts erstellen, um Benutzertabelleninformationen zu sammeln, benutzerdefinierte Datenbankabfragen zu erstellen und Informationen an den Benutzer zurückzugeben. Mit dem ASP-Request-Objekt können Sie in eine HTML-Tabelle eingegebene Informationen abrufen und diese Informationen in eine SQL-Anweisung integrieren. Das folgende Skriptmodul fügt beispielsweise von einer HTML-Tabelle bereitgestellte Informationen in eine Tabelle ein. Dieses Skript verwendet die Form-Sammlung von Request-Objekten, um Benutzerinformationen zu sammeln.
<%
'Öffnen Sie eine Verbindung mit dem Connection-Objekt
'verfügt nicht über eine Open-Methode zum Herstellen einer Verbindung
strDSN = „FILEDSN=MyDatabase.dsn“
Setze cn = Server.CreateObject("ADODB.Connection")
cn.StrDSN öffnen
'Befehlsobjekt instanziieren
'und verwenden Sie die ActiveConnection-Eigenschaft zum Anhängen
'Verbindung zum Command-Objekt
Setze cm= Server.CreateObject("ADODB.Command")
Legen Sie cm.ActiveConnection = cn fest
'SQL-Abfrage definieren
cm.CommandText = „INSERT INTO MySeedsTable (Type) VALUES (?)“
'Definieren Sie die Konfigurationsinformationen für Abfrageparameter
cm.Parameters.Append cm.CreateParameter("type",200, ,255 )
'Einfügung definieren und ausführen
cm("type") = Request("SeedType")
cm.Ausführen
%>
Verwalten von Datenbankverbindungen Die größte Herausforderung beim Entwerfen einer robusten Web-Datenbankanwendung, beispielsweise einer Online-Shopping-Anwendung, die Tausende von Kunden bedient, besteht in der ordnungsgemäßen Verwaltung von Datenbankverbindungen. Das Öffnen und Aufrechterhalten einer Datenbankverbindung, auch wenn keine Informationen übertragen werden, kann die Ressourcen des Datenbankservers stark verbrauchen und zu Verbindungsproblemen führen. Eine gut konzipierte Webdatenbankanwendung recycelt Datenbankverbindungen und ist in der Lage, durch Netzwerküberlastung verursachte Verzögerungen zu kompensieren.
Verbindungs-Timeouts verursachen Ein plötzlicher Anstieg der Aktivität kann den Datenbankserver sehr unhandlich machen und die Zeit, die zum Herstellen einer Datenbankverbindung benötigt wird, erheblich verlängern. Infolgedessen beeinträchtigt eine übermäßige Verbindungslatenz die Datenbankleistung.
Mit dem ConnectionTimeout des Connection-Objekts können Sie die Zeit begrenzen, die eine Anwendung wartet, bevor sie den Verbindungsversuch abbricht und eine Fehlermeldung ausgibt. Das folgende Skript legt beispielsweise die ConnectionTimeout-Eigenschaft so fest, dass 20 Sekunden gewartet wird, bevor ein Verbindungsversuch abgebrochen wird:
Setze cn = Server.CreateObject("ADODB.Connection")
cn.ConnectionTimeout = 20
cn.Öffnen Sie „FILEDSN=MyDatabase.dsn“
Die Standardeigenschaft „ConnectionTimeout“ beträgt 30 Sekunden.
Hinweis Bevor Sie die ConnectionTimeout-Eigenschaft in eine Datenbankanwendung integrieren, stellen Sie sicher, dass der Verbindungsanbieter und die Datenquelle die Eigenschaft unterstützen.
Gemeinsam genutzte Verbindungen Webdatenbankanwendungen, die häufig Datenbankverbindungen herstellen und trennen, können die Leistung des Datenbankservers beeinträchtigen. ASP unterstützt die effiziente Verwaltung von Verbindungen mithilfe der Freigabefunktionen von ODBC 3.5. Die Verbindungsfreigabe verwaltet offene Datenbankverbindungen und verwaltet die gemeinsame Nutzung dieser Verbindung durch verschiedene Benutzer, um ihre Leistung aufrechtzuerhalten und die Anzahl inaktiver Verbindungen zu reduzieren. Bei jeder Verbindungsanforderung ermittelt der Verbindungspool zunächst, ob eine freie Verbindung im Pool vorhanden ist. Falls vorhanden, gibt der Verbindungspool die Verbindung zurück, anstatt eine neue Verbindung zur Datenbank herzustellen.
Wenn Sie möchten, dass Ihr ODBC-Treiber an der Verbindungsfreigabe teilnimmt, müssen Sie den Datenbanktreiber konfigurieren und die CPTimeout-Eigenschaft des Treibers in der Windows NT-Registrierung festlegen. Wenn ODBC die Verbindung trennt, wird die Verbindung gepoolt und nicht getrennt. Die CPTimeout-Eigenschaft bestimmt, wie lange eine Verbindung im Verbindungspool beibehalten wird. Wenn eine Verbindung länger als die CPTimeout-Einstellung im Pool verbleibt, wird die Verbindung geschlossen und aus dem Pool entfernt. Der Standardwert für CPTimeout beträgt 60 Sekunden.
Sie können Verbindungspooling für einen bestimmten ODBC-Datenbanktreiber aktivieren, indem Sie die CPTimeout-Eigenschaft selektiv festlegen, indem Sie einen Registrierungsschlüsselsatz wie folgt erstellen:
HKEY_LOCAL_MACHINESOFTWAREODBCODBCINST.INIdriver-nameCPTimeout = Zeitüberschreitung
(REG_SZ, Einheiten sind in Sekunden)
Der folgende Schlüssel legt beispielsweise die Zeitüberschreitungseinstellung für den Verbindungspool des SQL Server-Treibers auf 180 Sekunden (3 Minuten) fest.
HKEY_LOCAL_MACHINESOFTWAREODBCODBCINST.INISQL ServerCPTimeout = 180
Hinweis Standardmäßig aktiviert der Webserver den Verbindungspool von SQL Server, indem er CPTimeout auf 60 Sekunden festlegt.
Verwenden von seitenübergreifenden Verbindungen Obwohl Sie seitenübergreifende Verbindungen wiederverwenden können, indem Sie Verbindungen im Anwendungsobjekt von ASP speichern, ist es unnötig, die Verbindung ständig offen zu halten, und nutzt die Vorteile des Verbindungspoolings nicht vollständig aus. Wenn viele Benutzer eine Verbindung mit derselben ASP-Datenbankanwendung herstellen müssen, besteht ein guter Ansatz darin, die Datenbankverbindung wiederzuverwenden, indem die seitenübergreifende Verbindungszeichenfolge im ASP-Anwendungsobjekt platziert wird. Beispielsweise können Sie die Verbindungszeichenfolge in der Ereignisprozedur Application_OnStart der Datei Global.asa angeben, wie im folgenden Skript gezeigt:
Anwendungssperre
Application("ConnectionString") = "FILEDSN=MyDatabase.dsn"
Anwendung.entsperren
Schreiben Sie dann in jede ASP-Datei, die auf die Datenbank zugreift:
<OBJECT RUNAT=Server ID=cn PROGID="ADODB.Connection"> </OBJECT>
Um eine Instanz des Verbindungsobjekts zu erstellen, verwenden Sie das folgende Skript:
cn.Open Application("ConnectionString")
Bei offenen Verbindungen können Sie am Ende der Seite das folgende Skript schreiben, um die Verbindung zu schließen:
cn.Schließen
In Situationen, in denen ein einzelner Benutzer eine seitenübergreifende Verbindung wiederverwenden muss, ist es besser, die Sitzungsobjektverbindung anstelle des Anwendungsobjekts zu verwenden.
Schließen Sie die Verbindung. Wenn Sie den Verbindungspool besser nutzen möchten, sollten Sie die Datenbankverbindung so schnell wie möglich schließen. Standardmäßig wird die Verbindung beendet, nachdem die Ausführung des Skripts abgeschlossen ist. Das Schließen einer Verbindung, wenn sie nicht mehr benötigt wird, reduziert die Anforderungen an den Datenbankserver und macht die Verbindung für andere Benutzer verfügbar.
Sie können die Close-Methode des Connection-Objekts verwenden, um die Verbindung zwischen dem Connection-Objekt und der Datenbank zu beenden. Das folgende Skript öffnet die Verbindung und schließt sie anschließend:
<% strDSN = "FILEDSN=MyDatabase.dsn"
Setze cn = Server.CreateObject("ADODB.Connection")
cn.Öffnen
cn.Schließen
%>