ASP-Vorlesung 9: ASP und Datenbank (4)
Autor:Eve Cole
Aktualisierungszeit:2009-05-30 19:54:56
In dieser Vorlesung werden wir hauptsächlich die Verwendung von Parametern und gespeicherten Prozeduren vorstellen.
1. Verwenden Sie das Command-Objekt und das Parameter-Objekt, um Parameter zu übertragen. Erstellen Sie zunächst eine Verbindungsdatei AdoSQL7.asp für die Verwendung Zukunft.
<% 'AdoSQL7.asp
Option explizit
Response.Expires = 0
„Teil 1: Eine Verbindung herstellen.“
Dim Cnn, StrCnn
Setze Cnn = Server.CreateObject("ADODB.Connection")
StrCnn = „Provider=sqloledb; Benutzer-ID=sa; Passwort=; Erstkatalog=pubs; Datenquelle=ICBCZJP“
Cnn.Open StrCnn
%>
Hinweis: Wenn Sie es selbst verwenden, stellen Sie die Datenquelle auf den Computernamen Ihres Datenbankservers ein.
Darüber hinaus war es in der Vergangenheit bei der Verwendung einer Access-Datenbank sehr praktisch, Microsoft Access97 zum Anzeigen von Feldern und Daten zu verwenden. Bei der Verwendung einer SQL Server-Datenbank ist dies jedoch der Fall, insbesondere beim Debuggen von ASP-Skripten nicht auf dem Datenbankserver, sondern auf einem anderen Computer Zum Anzeigen von Feldern und Daten ist eine separate Installation erforderlich: Msqry32.exe (Microsoft Query) wird in der Regel im Verzeichnis „Microsoft OfficeOffice“ installiert.
Beispiel wuf70.asp:
<%@ LANGUAGE="VBSCRIPT" %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<% ' wuf70.asp
Dimmen Sie cmdTest, prmTest, rsTest
'Befehlsobjekt erstellen
Setze cmdTest = Server.CreateObject("ADODB.Command")
„Recordset- und Command-Objekte können über die ActiveConnection-Eigenschaft eine Verbindung zu Connection-Objekten herstellen.“
cmdTest.ActiveConnection = Cnn
'SQL-Befehl – enthält zwei Parameter, verwenden? äußern
cmdTest.CommandText = „Jobs aktualisieren Set job_desc = ? Wo job_id = ?“
'Setzen Sie den Befehlstyp auf SQL-Anweisung
cmdTest.CommandType = adCmdText
Das Attribut „Prepared“ bestimmt, ob der SQL-Befehl zuerst kompiliert werden soll. Wenn Sie es auf „True“ setzen, kann die Ausführung beschleunigt werden.
cmdTest.Prepared = True
'Parameterobjekt erstellen
Setze prmTest=cmdTest.CreateParameter("job_desc",adVarChar,adParamInput,50,"network")
'Daten an die Parameter-Datensammlung anhängen
cmdTest.Parameters.Append prmTest
Set prmTest = cmdTest.CreateParameter("job_id",adSmallInt,adParamInput,,"12")
cmdTest.Parameters.Append prmTest
„Änderungen ausführen – es müssen keine Ergebnisse zurückgegeben werden, verwenden Sie einfach cmdTest.Execute.“
cmdTest.Execute
„Parameter zurücksetzen und ausführen – Sie können ein weiteres Datenelement ändern.“
cmdTest.Parameters("job_id") = "1"
cmdTest.Parameters("job_desc") = "Test"
cmdTest.Execute
'Parameter zum Ausführen zurücksetzen
cmdTest("job_id") = "14"
cmdTest("job_desc") = "Finanzen"
cmdTest.Execute
Setze rsTest = Cnn.Execute("Wähle job_id,job_desc aus Jobs aus")
Während nicht rsTest.EOF
Response.Write rsTest(0) & rsTest(1) & "<br>"
rsTest.MoveNext
Wend
Cnn.close: Setze prmTest = Nothing
Setze cmdTest = Nothing: Setze Cnn = Nothing
%>
analysieren:
1. Die CreateParameter-Methode des Command-Objekts wird zum Erstellen von Parameterobjekten für SQL-Befehle oder gespeicherte Prozeduren verwendet. Es gibt insgesamt fünf Parameter (alle fünf Parameter sind optional):
Der erste Parameter: der Name des Parameterobjekts;
Der zweite Parameter: der Datentyp des Parameterobjekts, es gibt zu viele Typen, siehe ADO-Hilfe, hier adVarChar (Zeichenfolgenwert), adSmallInt (2-Byte-Ganzzahl mit Vorzeichen);
Der dritte Parameter: Parametertyp. Kann sein: adParamInput (gibt einen Eingabeparameter an), adParamOutput (gibt einen Ausgabeparameter an), adParamReturnValue (gibt einen Rückgabewert an), adParamUnknown (gibt an, dass der Parametertyp nicht bestimmt werden kann), adParamInputOutput (gibt einen Eingabe-/Ausgabeparameter an);
Der vierte Parameter: Die Datenlänge des Parameters. Es ist am besten, ihn als gleich der Länge des entsprechenden Felds in der Datenbank anzugeben, um Fehler bei der Verwendung zu vermeiden, insbesondere wenn der Datentyp VarChar ist Da es sich um einen Datumstyp handelt, müssen Sie diesen Wert nicht angeben.
Der fünfte Parameter: der Anfangswert der Parametereinstellung.
2. Die cmdTest.Parameters.Append-Methode fügt der Parameter-Datensammlung ein Parameter-Objekt hinzu. Anhand dieses Beispiels können Sie auch sehen, wie mehrere Parameter verwendet werden.
3. Wie Sie an diesem Beispiel sehen können, müssen Sie nur die Eingabeparameter zurücksetzen, um andere Daten zu ändern, was sehr praktisch ist. Diese Idee ist auch eine der am häufigsten verwendeten Methoden in der Programmierung.
4. Um die Parameter zurückzusetzen, können Sie cmdTest.Parameters verwenden oder es als cmdTest("job_id") weglassen.
2. Verwendung gespeicherter Prozeduren in ASP (eine gespeicherte Prozedur befindet sich auf dem Datenbankserver und ist eine Sammlung von SQL-Anweisungen, die eine oder mehrere SQL-Anweisungen enthalten können). Der Inhalt dieser Vorlesung enthält hauptsächlich Beispiele, um zu veranschaulichen, wie gespeicherte Prozeduren in ASP aufgerufen werden.
Die Vorteile der Verwendung gespeicherter Prozeduren sind groß. Sie sind effizienter als die Ausführung von SQL-Befehlen in ASP-Skripten. Sie können die Gesamtleistung verbessern und die Netzwerklast verringern (durch Reduzierung der Interaktion zwischen dem Netzwerkserver und dem Datenserver). und die Codeflexibilität usw. verbessern.
(1) Verwendung von Eingabeparametern in der gespeicherten Prozedur Die in diesem Beispiel verwendete gespeicherte Prozedur ist „byroyalty“, die mit SQL Server 7.0 geliefert wird. Die darin enthaltene SQL-Anweisung ist nichts weiter als eine zusätzliche CREATE PROCEDURE byroyalty und eine Eingabe . Der Parameter ist @percentage:
PROZEDUR ERSTELLEN byroyalty @percentage int
ALS
Wählen Sie au_id vom Titelautor aus
wobei titleauthor.royaltyper = @percentage
Beispiel wuf71.asp
<% @LANGUAGE = VBScript %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<% ' wuf71.asp
Dimmen Sie cmdTest, prmTest, rsTest
Setze cmdTest = Server.CreateObject("ADODB.Command")
cmdTest.CommandText = "byroyalty" 'Name der gespeicherten Prozedur
'Legen Sie den Befehlstyp als gespeicherte Prozedur fest
cmdTest.CommandType = adCmdStoredProc
'Parameterobjekt erstellen
Setze prmTest = Server.CreateObject("ADODB.Parameter")
'Typattribut entspricht dem zweiten Parameter in wuf70.asp
prmTest.Type = adInteger '4-Byte-Ganzzahl mit Vorzeichen' Richtungsattribut entspricht dem dritten Parameter in wuf70.asp
prmTest.Direction = adParamInput
'Wertattribut entspricht dem fünften Parameter in wuf70.asp
prmTest.Value = 30
cmdTest.Parameters.Append prmTest
Legen Sie cmdTest.ActiveConnection = Cnn fest
„Sie müssen einen Datensatz zurückgeben, also verwenden Sie Set rsTest = cmdTest.Execute.“
Setzen Sie rsTest = cmdTest.Execute
Während nicht rsTest.EOF
Response.Write rsTest(0) & „<br>“
rsTest.MoveNext
Wend
Cnn.schließen
Setze rsTest = Nothing: Setze prmTest = Nothing
Setze cmdTest = Nothing: Setze Cnn = Nothing
%>
Die CommandText-Eigenschaft kann entweder einen SQL-Befehl, eine gespeicherte Prozedur oder einen Tabellennamen angeben.
In diesem Beispiel unterscheidet sich das Erstellen eines Parameterobjekts geringfügig von wuf70.asp. Wenn Sie genau hinsehen, ist die Bedeutung in diesem Beispiel ähnlich: prmTest.Name, prmTest.Size sowie Typ und Richtung und Wert, entsprechend den fünf Parametern in wuf70.asp.
(2) Wenn Sie Ausgabeparameter verwenden, um einen Datensatz abzurufen oder einen Wert aus einer Datenbanktabelle zu berechnen, müssen Sie eine gespeicherte Prozedur verwenden, die Ausgabeparameter zurückgibt. Erstellen Sie zum Beispiel zunächst eine neue gespeicherte Prozedur OUTemploy in der Pubs-Bibliothek von SQL Server. Diese gespeicherte Prozedur muss zwei Datumsangaben eingeben und dann einen Maximalwert ausgeben.
VERFAHREN ERSTELLEN OUTemploy
(
@job_lvl tinyint AUSGABE,
@hire_date1 datetime,
@hire_date2 datetime
)
ALS
Wählen Sie @job_lvl = MAX(job_lvl) vom Mitarbeiter aus
wobei Hire_date >= @hire_date1 und Hire_date <= @hire_date2 ist
Es gibt mehrere Möglichkeiten, gespeicherte Prozeduren zu erstellen:
1. Verwenden Sie den Enterprise Manager von Microsoft SQL Server. Öffnen Sie ihn nach dem Öffnen im Baumverzeichnis auf der linken Seite: Konsolenstamm – Microsoft SQL Server – SQL Server-Gruppe – ICBCZJP (Windows NT) – Datenbanken – Pubs – gespeicherte Prozedur – Neue gespeicherte Prozedur . Geben Sie die gespeicherte Prozedur ein.
2. Stellen Sie mit dem Query Analyzer von Microsoft SQL Server zunächst eine Verbindung zum Datenbankserver her und wählen Sie die Pubs-Datenbank aus. Geben Sie oben die gespeicherte Prozedur ein und klicken Sie auf „Abfrage ausführen“ (oder drücken Sie F5).
3. Klicken Sie in VB6.0 nach dem Öffnen des Menüs „Ansicht“/„Datenansichtsfenster“ mit der rechten Maustaste auf „Datenverknüpfung“/„Neue Datenverknüpfung“.
4. Verwenden Sie ein ASP-Skript, um eine gespeicherte Prozedur zu erstellen, zum Beispiel wuf75.asp:
<% @LANGUAGE = VBScript %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<% ' wuf75.asp
DimStrSQL
'Hinweis: & Chr(10) & Chr(13) sind völlig unnötig, hauptsächlich aus optischen Gründen.
StrSQL="CREATE PROCEDURE OUTemploy ( @job_lvl tinyint OUTPUT, " & Chr(10) & Chr(13) &_
"@hire_date1 datetime, @hire_date2 datetime) AS " & Chr(10) & Chr(13) &_
„select @job_lvl = MAX(job_lvl) vom Mitarbeiter“ &_
„wobei Hire_date >= @hire_date1 und Hire_date <= @hire_date2“
Cnn.StrSQL ausführen
Response.Write „Gespeicherte Prozedur erfolgreich erstellt“
Cnn.close: Setze Cnn = Nothing
%>
Nachdem die gespeicherte Prozedur erstellt wurde, können Sie sie zusätzlich zur Verwendung des Menüs auch mit der SQL-Anweisung „Drop Procedure OUTemploy“ löschen.
Beispiel wuf72.asp – Senden Sie die erforderlichen Eingabeparameter an die gespeicherte Prozedur und erhalten Sie die Ausgabeergebnisse.
<% @LANGUAGE = VBScript %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<% ' wuf72.asp
Dimmen Sie cmdTest, prmTest
Setze cmdTest = Server.CreateObject("ADODB.Command")
cmdTest.ActiveConnection = Cnn
cmdTest.CommandText = "OUTemploy" 'Name der gespeicherten Prozedur
cmdTest.CommandType = adCmdStoredProc
'Parameterobjekt erstellen
Set prmTest = cmdTest.CreateParameter("job_lvl",adTinyInt,adParamOutput)
cmdTest.Parameters.Append prmTest
'adTinyInt – 1-Byte-Ganzzahl mit Vorzeichen
'adDbDate – Datumswert (JJJJMMTT)
Set prmTest = cmdTest.CreateParameter("hiredate1",adDBDate,adParamInput,,"1993-05-09")
cmdTest.Parameters.Append prmTest
Set prmTest = cmdTest.CreateParameter("hiredate2",adDBDate,adParamInput,,"1994-02-01")
cmdTest.Parameters.Append prmTest
cmdTest.Execute
„Die folgenden drei Ausdrücke haben die gleiche Bedeutung
Response.Write cmdtest("job_lvl") & "<br>"
Response.Write cmdTest.Parameters("job_lvl") & "<br>"
Response.Write cmdTest.Parameters("job_lvl").Value
Cnn.schließen
Setzen Sie prmTest = Nothing
Setze cmdTest = Nothing: Setze Cnn = Nothing
%>
(3) Verwenden Sie den Rückgabecode-Parameter, um mit der Return-Anweisung verschiedene Rückgabecodes aus der gespeicherten Prozedur zurückzugeben. Die folgende gespeicherte Prozedur ruft beispielsweise zuerst einen Datensatz ab und gibt dann 1 zurück, wenn es einen Mitarbeiter namens Margaret gibt, andernfalls gibt 0 zurück.
Erstellen Sie die Prozedur Returnemploy
ALS
Wählen Sie emp_id, fname vom Mitarbeiter
Wenn vorhanden (Wählen Sie fname vom Mitarbeiter aus, wobei fname='Margaret')
Zurück(1)
Anders
Rückgabe(0)
Beispiel wuf73.asp
<% @LANGUAGE = VBScript %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<% ' wuf73.asp
Dimmen Sie cmdTest, prmTest, rsTest
Setze cmdTest = Server.CreateObject("ADODB.Command")
cmdTest.ActiveConnection = Cnn
cmdTest.CommandText = "Returnemploy" 'Name der gespeicherten Prozedur
cmdTest.CommandType = adCmdStoredProc
Set prmTest = cmdTest.CreateParameter("ReturnValue",adInteger,adParamReturnValue)
cmdTest.Parameters.Append prmTest
Setze rsTest = cmdTest.Execute()
Während nicht rsTest.EOF
Response.Write rsTest(0) & " ][ " & rsTest(1) & "<br>"
rsTest.MoveNext
Wend
rsTest.Close: Setze rsTest = Nothing
'Bevor cmdtest("ReturnValue") zurückgegeben wird, muss rsTest zuerst geschlossen werden, sonst ist das Ergebnis falsch
Wenn cmdtest("ReturnValue") = 1, dann
Antwort.Schreiben Sie „Da ist dieser Mitarbeiter“
Anders
Antwort. Schreiben Sie „Kein solcher Mitarbeiter“
Ende wenn
Cnn.schließen
Setzen Sie prmTest = Nothing
Setze cmdTest = Nothing: Setze Cnn = Nothing
%>
3. So verarbeiten Sie Big Data: „Big Data“ bezieht sich hier hauptsächlich auf die Felder Text (großer Text) und Bild (Bild), deren Daten mit der oben beschriebenen Methode nicht korrekt ermittelt werden können. Sie müssen zuerst Size = rsTest(0).ActualSize verwenden, um die tatsächliche Länge des Feldwerts abzurufen, und dann rsTest(0).GetChunk(Size) verwenden, um die Daten abzurufen. Da diese Felder in der Praxis relativ groß sind, wird im Allgemeinen segmentiertes Lesen verwendet, um Serverressourcen zu sparen und effizient zu nutzen. Beispiel wuf74.asp:
<% @LANGUAGE = VBScript %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<% ' wuf74.asp
Dimmen Sie StrSQL, rsTest
'pr_info ist ein Textfeld
StrSQL = „Wählen Sie pr_info,pub_id aus pub_info aus“
Setze rsTest = Cnn.Execute(StrSQL)
Dimmen Sie BasicSize, BeginSize, LText
Tun Sie dies, ohne rsTest.EOF
Response.Write rsTest(1) & „<br>“
'Jedes Mal 1024 Bytes lesen
Grundgröße = 1024
BeginSize = 0
Während BeginSize < rsTest(0).ActualSize
LText = rsTest(0).GetChunk(BasicSize)
BeginSize = BeginSize + BasicSize
'Segmentweise Ausgabe an den Client
Antwort.LText schreiben
Wend
Response.Write „<br><br>“
rsTest.MoveNext
Schleife
Cnn.schließen
Setze rsTest = Nothing: Setze Cnn = Nothing
%>
In diesem Beispiel werden jedes Mal maximal 1024 Bytes gelesen und die Daten werden mehrmals eingelesen. Wenn Sie dagegen große Datenmengen in die Datenbank schreiben, ähnelt die Methode der oben genannten, verwenden jedoch anstelle der GetChunk-Methode die AppendChunk-Methode:
rsTest(0).AppendChunkLtext
Hinweis: Zum Schluss möchte ich noch einen kleinen Trick zur SQL Server-Datenbank vorstellen. Wenn Sie auf diese Situation gestoßen sind: Die chinesischen Daten in der Datenbank werden als verstümmelte Zeichen angezeigt, geraten Sie bitte nicht in Panik. Sie müssen nur auf meine Website gehen, um sqlsrv32.dll herunterzuladen und die gleichnamige Datei unter „C:WindowsSystem“ zu überschreiben. Die Ursache des Problems ist der SQL Server-Treiber, der typischerweise in Windows 98 Second Edition (Versionsnummer des SQL Server-Treibers ist 3.70.06.23) oder Windows 2000 auftritt oder wenn MDAC2.5 (Versionsnummer ist 3.70.08.20) installiert ist .