ASP-Vorlesung 7: ASP und Datenbank (2)
Autor:Eve Cole
Aktualisierungszeit:2009-05-30 19:55:02
In der vorherigen Vorlesung haben wir gelernt, wie man eine Verbindung mit der Datenbank herstellt und Daten aus der Datenbank abruft. Der heutige Inhalt befasst sich mit dem Hinzufügen neuer Daten zur Datenbank sowie dem Ändern und Löschen von Daten in der Datenbank.
1. Methode 1 zum Hinzufügen neuer Daten zur Datenbank: Verwenden Sie SQL-Anweisungen, zum Beispiel wuf50.asp.
Um zukünftige Verfahren zu vereinfachen, wird der Verbindungsteil mit der Access-Datenbank in einer Datei abgelegt. Diese Datei wird nicht erläutert, wenn sie in Zukunft benötigt wird.
<% 'AdoAccess.asp
Option explizit
Response.Expires = 0
„Teil 1: Eine Verbindung herstellen.“
Dim Cnn, StrCnn
Setze Cnn = Server.CreateObject("ADODB.Connection")
StrCnn = "Provider = Microsoft.Jet.OLEDB.4.0; Datenquelle = C:InetpubhomeaspNorthwind.mdb"
Cnn.Open StrCnn
%>
Programm wuf50.asp
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<% ' wuf50.asp
'Teil 2: Neue Daten mit Execute of Connection-Objekt hinzufügen
Dimmen Sie StrSQL, rsTest
StrSQL = "INSERT INTO Shipper (Firmenname, Telefonnummer) VALUES('wu''feng','0571-7227298')"
Cnn.StrSQL ausführen
%>
<HTML>
<KÖRPER>
<% 'Teil 3: Zeigen Sie den erhaltenen Datensatz im Browser an
Setze rsTest = Cnn.Execute("Select * From Carrier")
Tun Sie dies, ohne rsTest.EOF
Response.Write rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
Schleife
„Teil 4: Das Schlachtfeld aufräumen.“
Cnn.schließen
Setze rsTest = Nothing: Setze Cnn = Nothing
%>
</BODY>
</HTML>
Bitte beachten Sie folgende Punkte:
1. Wenn Sie SQL-Anweisungen zum Hinzufügen von Daten zu einer Access-Datenbank verwenden, müssen Sie „Einfügen in“ verwenden. Um Daten zu einer SQL Server-Datenbank hinzuzufügen, verwenden Sie einfach „Einfügen“.
2. Das Format zum Hinzufügen von Daten mithilfe von SQL-Anweisungen ist wie im obigen Beispiel. Beachten Sie, dass „wu'feng“ in der Anweisung verwendet werden muss, da SQL-Anweisungen „ als Trennzeichen für Zeichenfolgen verwenden.
3. Durch die Kombination dieses Beispiels mit dem, was Sie zuvor gelernt haben, können Sie Daten aus einem HTML-Formular hinzufügen.
4. Beachten Sie, dass es ein Feld mit einem Datentyp der automatischen Nummerierung gibt, wie in diesem Beispiel „Versender-ID“, sodass Sie nicht darüber nachdenken müssen, wie Sie Code schreiben, um eine aufsteigende Nummer zu erhalten.
Methode 2: Verwenden Sie die Addnew-Methode des Recordset-Objekts, zum Beispiel wuf51.asp.
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<!--#include file="adovbs.inc"-->
<% ' wuf51.asp
„Teil 2: Neue Daten mit der AddNew-Methode des Recordset-Objekts hinzufügen
Dimmen Sie StrSQL, rsTest
Setze rsTest = server.CreateObject("ADODB.Recordset")
rsTest.CursorType = adOpenKeySet 'adOpenDynamic
„Ohne den folgenden Satz darf die Datenbank nicht aktualisiert werden.“
rsTest.LockType = adLockOptimistic
rsTest.Open „Shipper“,Cnn,,,adCmdTable
rsTest.AddNew
rsTest("Firmenname") = "wu'feng"
rsTest("Telephone") = "0571-7227298"
rsTest.Update
%>
<HTML>
<KÖRPER>
<% 'Teil 3: Zeigen Sie den erhaltenen Datensatz im Browser an
'Bewegen Sie den Datenbankzeiger auf den ersten Datensatz in der Tabelle
Wenn nicht rsTest.EOF <> 0 Dann
Response.Write „Es gibt [“ & rsTest.RecordCount & „] Datenstücke in der Tabelle“ & „<Br><Br>“
rsTest.MoveFirst
Ende wenn
Tun Sie dies, ohne rsTest.EOF
Response.Write rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
Schleife
„Teil 4: Das Schlachtfeld aufräumen.“
Cnn.schließen
Setze rsTest = Nothing: Setze Cnn = Nothing
%>
</BODY>
</HTML>
analysieren:
1. Warum rsTest.LockType = adLockOptimistic festlegen?
Die LockType-Eigenschaft des Recordset-Objekts verfügt über vier optionale Werte:
adLockReadOnly – der Standardwert, der angibt, dass das Recordset im schreibgeschützten Modus geöffnet ist, sodass die Daten nicht geändert werden können. In diesem Fall tritt bei Verwendung der AddNew-Methode ein Fehler auf.
adLockPessimistic – Konservative Datensatzsperre (Eintrag für Eintrag). Verwenden Sie die Methode, die Datensätze der Datenquelle beim Bearbeiten sofort zu sperren. Zu diesem Zeitpunkt haben andere Benutzer keinen Zugriff auf die Daten.
adLockOptimistic – Offene Datensatzsperre (Eintrag für Eintrag). Datensätze werden nur gesperrt, wenn die Update-Methode aufgerufen wird. Denken Sie darüber nach, ähnelt diese Eigenschaft den Lock- und Unlock-Eigenschaften des Anwendungsobjekts, über das wir gesprochen haben?
adLockBatchOptimistic – Stapelaktualisierungen öffnen. Wird zum stapelweisen Aktualisieren von Daten verwendet, entsprechend der UpdateBatch-Methode.
Erwähnen wir übrigens das in der vorherigen Vorlesung erwähnte CursorType-Attribut, das ebenfalls vier Werte hat:
adOpenForwardOnly – Nur-Vorwärts-Cursor, Standardwert, kann im Datensatz nur vorwärts scrollen. Das spart Ressourcen und verbessert die Leistung.
adOpenStatic – statischer Cursor. Eine statische Kopie einer Sammlung von Datensätzen, die zum Suchen von Daten oder zum Generieren von Berichten verwendet werden kann. Darüber hinaus sind von anderen Benutzern vorgenommene Ergänzungen, Änderungen oder Löschungen nicht sichtbar. Es wird empfohlen, in ASP nur diese beiden Cursor zu verwenden.
adOpenKeyset – Keyset-Cursor. Keyset-Cursor ähneln dynamischen Cursorn, mit der Ausnahme, dass ihnen die Anzeige von Datensätzen, die von anderen Benutzern hinzugefügt wurden, und der Zugriff auf Datensätze, die von anderen Benutzern gelöscht wurden, weiterhin untersagt ist.
adOpenDynamic – dynamischer Cursor. Kann von anderen Benutzern vorgenommene Ergänzungen, Änderungen und Löschungen sehen. Alle Arten von Verschiebungen innerhalb des Recordsets sind zulässig.
Sicher ist, dass eine solche abstrakte Beschreibung etwas fadenscheinig ist und ich sie immer noch nicht ganz verstehe.
(1) Wenn Sie nur Daten abrufen, verwenden Sie einfach den Standardwert;
(2) Wenn Sie die Update-Methode verwenden, um ein Datenelement zu aktualisieren, verwenden Sie adLockOptimistic für das LockType-Attribut und verwenden Sie adLockBatchOptimistic, wenn Sie die UpdataBatch-Methode verwenden, um Daten in Stapeln zu aktualisieren.
(3) Wenn eine Schreibaktion in die Datenbank erfolgt, reicht es normalerweise aus, adOpenKeyset für das CursorType-Attribut zu verwenden.
Wie wäre es damit? Auch wenn Sie es noch nicht verstehen, können Sie es verwenden.
2. Wenn Sie sich mit Datenbanken nicht so gut auskennen, ist es oft von Vorteil, rsTest.MoveFirst zu verwenden, um den Zeiger auf den ersten Datensatz zu verschieben, bevor die Ausgabe angezeigt wird. Wenn jedoch keine Daten in der Datenbank vorhanden sind, kann die MoveFirst-Methode nicht verwendet werden. Verwenden Sie daher vor der Verwendung das Attribut rsTest.EOF, um zu ermitteln, ob Daten in der Datenbank vorhanden sind.
3. Die RecordCount-Eigenschaft (um die Anzahl der Datensätze im Recordset zu ermitteln) kann nur verwendet werden, wenn der Cursortyp auf adOpenKeyset oder adOpenStatic festgelegt ist.
2. Ändern Sie vorhandene Daten in der Datenbank. Methode 1: Verwenden Sie SQL-Anweisungen. Zum Beispiel wuf52.asp, das Programm ähnelt im Wesentlichen wuf50.asp, hier werden nur die wichtigsten Teile aufgelistet.
„Teil 2: Daten mit der Execute-Methode des Connection-Objekts ändern
Dimmen Sie StrSQL, rsTest
StrSQL = „UPDATE Carrier SET phone = ‚(503) 555-3188‘ WHERE phone LIKE ‚%99%‘“
Cnn.StrSQL ausführen
Um die Daten zu ändern, müssen Sie nicht INSERT INTO...VALUES verwenden, sondern die UPDATE...SET-Anweisung verwenden. Die WHERE-Klausel bedeutet, die Telefonnummer zu ändern, die die Zeichenfolge „99“ („LIKE“ und „%“) enthält. " werden häufig in Fuzzy-Abfragen verwendet) an (503) 555-3188. Wenn keine Bedingungen festgelegt sind, werden alle Telefonnummern in der Tabelle geändert.
Methode 2: Verwenden Sie die Update-Methode des Recordset-Objekts. Programm wuf53.asp (ähnlich der Routine wuf51.asp)
„Teil 2: Daten mithilfe der Update-Methode des Recordset-Objekts ändern
Dimmen Sie StrSQL, rsTest
Setze rsTest = server.CreateObject("ADODB.Recordset")
rsTest.LockType = adLockOptimistic
StrSQL = „SELECT Nachname, Vorname, Geburtsdatum FROM Mitarbeiter WHERE Geburtsdatum = #55-03-04#“
rsTest.Open StrSQL, Cnn,,,adCmdText
rsTest("name") = "Chinesisch"
rsTest.Update
analysieren:
1. Wenn es sich bei der Datenbank um eine Access-Datenbank handelt, sollte das Datum in der SQL-Anweisung in #55-03-04# eingeschlossen werden. Wenn es sich in diesem Beispiel um eine SQL Server-Datenbank handelt, sollte das Datum in „55-03“ eingeschlossen werden -04'.
2. In rsTest.Open StrSQL, Cnn, adCmdText ist der fünfte Parameter eine SQL-Anweisung. Tatsächlich kann der fünfte Parameter weggelassen werden, aber durch das Hinzufügen wird die Skriptausführung effizienter.
3. Mit der ersten Methode können Sie alle Datensätze, die die Bedingungen erfüllen (mehrere Datensätze oder ein Datensatz), gleichzeitig aktualisieren. Mit der zweiten Methode können Sie jedoch nur den aktuellen Datensatz (den ersten Datensatz, der die Bedingungen erfüllt) ändern.
3. Daten in der Datenbank löschen Methode 1: Verwenden Sie SQL-Anweisungen. Routine wuf55.asp
„Teil 2: Verwenden Sie SQL-Anweisungen, um Daten zu löschen
Dimmen Sie StrSQL, rsTest
StrSQL = „DELETE FROM Carrier WHERE phone number = ‚0571-7227298‘“
Cnn.StrSQL ausführen
Methode 2: Verwenden Sie die Methode „Delete“ des Recordset-Objekts. Routine wuf56.asp
„Teil 2: Verwenden Sie die Methode „Delete“ des Recordset-Objekts, um Daten zu löschen
Dimmen Sie StrSQL, rsTest
Setze rsTest = server.CreateObject("ADODB.Recordset")
rsTest.LockType = adLockOptimistic
StrSQL = „SELECT * FROM Carrier WHERE phone number = ‚0571-7227298‘“
rsTest.Open StrSQL, Cnn,,,adCmdText
Während nicht rsTest.EOF
rsTest.Delete
rsTest.MoveNext
Wend
Wenn der Datensatz mehrere Datensätze enthält, die die Bedingungen erfüllen, müssen Sie eine Schleife verwenden. Andernfalls löscht die Methode „Löschen“ nur den aktuellen Datensatz, d. h. den ersten Datensatz, der die Bedingungen erfüllt.
4. Weitere nützliche Kenntnisse
1. Daten in Stapeln aktualisieren Oben haben wir darüber gesprochen, wie man die Update-Methode des Recordset-Objekts zum Aktualisieren von Daten verwendet. Tatsächlich kann das Recordset-Objekt zwei Arten von Aktualisierungen unterstützen: sofortige Aktualisierungen und Stapelaktualisierungen.
Bei der sofortigen Aktualisierung werden alle Änderungen an den Daten sofort nach Aufruf der Update-Methode in die aktuelle Datenquelle geschrieben.
Mithilfe von Stapelaktualisierungen kann ein Anbieter Änderungen an mehreren Datensätzen zwischenspeichern und diese dann mithilfe der UpdateBatch-Methode in einem einzigen Aufruf an die Datenbank übertragen. Bei der Aktualisierung mehrerer Datensätze sind Stapelaktualisierungen effizienter als sofortige Aktualisierungen.
Die Standardeinstellung ist der sofortige Aktualisierungsmodus. Um den Stapelaktualisierungsmodus zu verwenden, verwenden Sie einen Client-Cursor, z. B. wuf54.asp.
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<!--#include file="adovbs.inc"-->
<% ' wuf54.asp
'Teil 2: Batch-Update-Modus
Dimmen Sie StrSQL, rsTest
Setze rsTest = server.CreateObject("ADODB.Recordset")
rsTest.CursorLocation = adUseClient 'Client-Cursortyp verwenden
rsTest.LockType = adLockBatchOptimistic
StrSQL = „SELECT * FROM Carrier WHERE phone LIKE ‚%99%‘“
rsTest.Open StrSQL, Cnn,,,adCmdText
rsTest.MoveFirst
Während nicht rsTest.EOF
rsTest("Firmenname") = "Chinesisch"
rsTest.MoveNext
Wend
rsTest.UpdateBatch
%>
<HTML>
<KÖRPER>
<% 'Teil 3: Zeigen Sie den erhaltenen Datensatz im Browser an
rsTest.Requery
Tun Sie dies, ohne rsTest.EOF
Response.Write rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
Schleife
„Teil 4: Das Schlachtfeld aufräumen.“
Cnn.schließen
Setze rsTest = Nothing: Setze Cnn = Nothing
%>
</BODY>
</HTML>
Beachten:
1) rsTest.CursorLocation = adUseClient hat zwei Werte, der andere Wert ist adUseServer (Standard). Für Anfänger ist der Cursortyp des Recordset-Objekts ein schwieriger Teil, um nicht noch mehr Verwirrung zu stiften . Bitte erkunden Sie die tatsächliche Verarbeitung langsam (versuchen Sie mehr).
2) rsTest.Requery: Verwenden Sie die Requery-Methode, um den gesamten Inhalt des Recordset-Objekts der Datenquelle zu aktualisieren. Der Aufruf dieser Methode entspricht dem aufeinanderfolgenden Aufrufen der Close- und Open-Methoden.
2. Erfahren Sie, wie Sie die Filter-Eigenschaft des Recordset-Objekts verwenden
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<!--#include file="adovbs.inc"-->
<% ' wuf57.asp
'Teil 2: Verwenden der Filter-Eigenschaft des Recordset-Objekts
Dimmen Sie StrSQL, rsTest
Setze rsTest = server.CreateObject("ADODB.Recordset")
rsTest.CursorType = adOpenStatic
rsTest.LockType = adLockOptimistic
rsTest.Open „Shipper“,Cnn,,,adCmdTable
„Datensätze herausfiltern, die die Kriterien erfüllen, während andere Datensätze herausgefiltert werden.“
rsTest.Filter = "Firmenname = 'wu''feng'"
Wenn rsTest.EOF Dann 'Wenn es keinen solchen Datensatz gibt, fügen Sie ihn hinzu.'
rsTest.AddNew
rsTest("Firmenname") = "wu'feng"
rsTest("Telephone") = "0571-7227298"
rsTest.Update
Sonst 'Wenn es einen Datensatz gibt, der die Bedingung erfüllt, ändern Sie den ersten Datensatz, der die Bedingung erfüllt
rsTest("Telefon") = "(571) 7227298"
rsTest.Update
Ende wenn
%>
<HTML>
<KÖRPER>
<% 'Teil 3: Zeigen Sie den erhaltenen Datensatz im Browser an
„Bitte vergleichen Sie sorgfältig den Unterschied zwischen Ja und Nein im folgenden Satz
'rsTest.Filter="" 'Wird zum Löschen des Filterattributs verwendet
rsTest.MoveFirst
Tun Sie dies, ohne rsTest.EOF
Response.Write rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
Schleife
„Teil 4: Das Schlachtfeld aufräumen.“
Cnn.schließen
Setze rsTest = Nothing: Setze Cnn = Nothing
%>
</BODY>
</HTML>
3. Zusätzlich zu den beiden oben vorgestellten Methoden können Sie zur Verwaltung der Datenbank auch SQL-Anweisungen und die Excute-Methode des Command-Objekts verwenden. Beispiel wuf58.asp
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<!--#include file="adovbs.inc"-->
<% ' wuf58.asp
„Teil 2: Pflegen Sie die Datenbank mithilfe von SQL-Anweisungen und der Excute-Methode des Command-Objekts
Dimmen Sie StrSQL, rsTest, cmdChange
StrSQL = "INSERT INTO Shipper (Firmenname, Telefonnummer) VALUES('wu''feng','0571-7227298')"
'Befehlsobjekt erstellen.
Setze cmdChange =server.CreateObject("ADODB.Command")
Legen Sie cmdChange.ActiveConnection = Cnn fest
cmdChange.CommandText = StrSQL
cmdChange.Execute
%>
<HTML>
<KÖRPER>
<% 'Teil 3: Zeigen Sie den erhaltenen Datensatz im Browser an
Setze rsTest = server.CreateObject("ADODB.Recordset")
rsTest.Open „Shipper“, Cnn, , , adCmdTable
Tun Sie dies, ohne rsTest.EOF
Response.Write rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
Schleife
„Teil 4: Das Schlachtfeld aufräumen.“
Cnn.schließen
Setze rsTest = Nothing: Setze Cnn = Nothing
%>
</BODY>
</HTML>
In dieser Vorlesung werden hauptsächlich drei Methoden zur Datenpflege vorgestellt. Anfänger müssen nur die ersten beiden Methoden beherrschen. Versuchen Sie im Allgemeinen, SQL-Anweisungen zum Lösen von Problemen zu verwenden. Dies ist einfach und klar. Der größte Vorteil der Verwendung von Recordset-Objekten besteht darin, dass Sie die große Anzahl von Eigenschaften und umfangreichen Cursortypen nutzen können und mehr Auswahlmöglichkeiten haben bringt auch einige Schwierigkeiten mit sich. Der Schlüssel liegt darin, mehr zu erforschen und mehr zu experimentieren.