Es gibt viele Artikel über ASP und gespeicherte Prozeduren (Stored Procedures), aber ich bezweifle, dass die Autoren sie tatsächlich praktiziert haben. Als ich ein Anfänger war, habe ich viele relevante Informationen konsultiert und festgestellt, dass viele der angebotenen Methoden in der Praxis nicht dieselben waren. Für einfache Anwendungen können diese Materialien hilfreich sein, sie sind jedoch darauf beschränkt, da sie grundsätzlich gleich sind und sich gegenseitig kopieren. Bei etwas komplexeren Anwendungen sind sie alle unklar.
Nun greife ich grundsätzlich auf SQL Server zu, indem ich gespeicherte Prozeduren aufrufe. Der folgende Text ist eine Zusammenfassung der Praxis und hoffe, dass er für alle hilfreich ist.
Bei einer gespeicherten Prozedur handelt es sich um einen oder mehrere SQL-Befehle, die als ausführbare Objekte in der Datenbank gespeichert sind.
Definitionen sind immer abstrakt. Eine gespeicherte Prozedur ist eigentlich eine Reihe von SQL-Anweisungen, die bestimmte Vorgänge abschließen können. Diese Anweisungen werden jedoch in der Datenbank abgelegt (hier sprechen wir nur über SQL Server). Wenn wir gespeicherte Prozeduren erstellen und gespeicherte Prozeduren in ASP aufrufen, können wir vermeiden, SQL-Anweisungen mit ASP-Code zu vermischen. Dies hat mindestens drei Vorteile:
Erstens wird die Effizienz erheblich verbessert. Die Ausführungsgeschwindigkeit der gespeicherten Prozedur selbst ist sehr hoch, und der Aufruf der gespeicherten Prozedur kann die Anzahl der Interaktionen mit der Datenbank erheblich reduzieren.
Zweitens: Verbesserung der Sicherheit. Wenn Sie SQL-Anweisungen in ASP-Code mischen, bedeutet dies, sobald der Code gefährdet ist, auch, dass die Bibliotheksstruktur gefährdet ist.
Drittens fördert es die Wiederverwendung von SQL-Anweisungen.
In ASP werden gespeicherte Prozeduren im Allgemeinen über das Befehlsobjekt aufgerufen. Abhängig von der Situation werden in diesem Artikel auch andere Aufrufmethoden vorgestellt. Zur Vereinfachung der Erklärung wird die folgende einfache Klassifizierung basierend auf der Eingabe und Ausgabe der gespeicherten Prozedur vorgenommen:
1. Die gespeicherte Prozedur, die nur einen einzelnen Datensatz zurückgibt,
setzt die folgende gespeicherte Prozedur voraus (der Zweck dieses Artikels besteht nicht darin, sie zu beschreiben). T-SQL-Syntax, daher gibt die gespeicherte Prozedur nur den Code aus, keine Erklärung):
/*SP1*/
CREATE PROCEDURE dbo.getUserList
as
set nocount on
begin
select * from dbo.[userinfo]
end
go
Die oben gespeicherte Prozedur ruft alle Datensätze ab in der Benutzerinfo-Tabelle und gibt einen Datensatz zurück. Der ASP-Code zum Aufrufen der gespeicherten Prozedur über das Befehlsobjekt lautet wie folgt:
'**Aufrufen der gespeicherten Prozedur über das Befehlsobjekt**
DIM MyComm,MyRst
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr ist die Datenbankverbindung String
MyComm.CommandText = "getUserList" 'Geben Sie den Namen der gespeicherten Prozedur an.
MyComm.CommandType = 4 'Geben Sie an, dass es sich um eine gespeicherte Prozedur handelt.
MyComm.Prepared = true 'Erfordert, dass der SQL-Befehl zuerst kompiliert wird.
Legen Sie MyRst fest = MyComm.Execute
Set MyComm = Nichts
gespeicherte Prozedur Der erhaltene Datensatz wird MyRst zugewiesen. Als nächstes kann MyRst bedient werden.
Im obigen Code gibt das CommandType-Attribut den Typ der Anforderung an. Der Wert und die Beschreibung lauten wie folgt:
-1 gibt an, dass der Typ des CommandText-Parameters nicht bestimmt werden kann.
1 gibt an, dass der CommandText-Parameter ein allgemeiner Befehlstyp
ist Der CommandText-Parameter ist ein vorhandener Tabellenname.
4 gibt an, dass der CommandText-Parameter der Name einer gespeicherten Prozedur ist.
Die gespeicherte Prozedur kann auch über das Connection-Objekt oder Recordset-Objekt aufgerufen werden. Die Methoden lauten wie folgt:
„**Rufen Sie die gespeicherte Prozedur über die Connection auf object**
DIM MyConn,MyRst
Set MyConn = Server.CreateObject("ADODB.Connection")
MyConn .open MyConStr 'MyConStr ist die Datenbankverbindungszeichenfolge
Set MyRst = MyConn.Execute("getUserList",0,4) 'Der letzte Parameter hat die gleiche Bedeutung wie CommandType
Set MyConn = Nothing
'**Aufrufen der gespeicherten Prozedur über das Recordset-Objekt**
DIM MyRst
Set MyRst = Server.CreateObject("ADODB.Recordset")
MyRst.open "getUserList",MyConStr,0,1 ,4
'MyConStr ist die Datenbankverbindungszeichenfolge, der letzte Parameter hat die gleiche Bedeutung wie CommandType
2. Es gibt keinen Eingabe- und Ausgabespeicher. Bitte sehen Sie sich die folgende gespeicherte Prozedur für den Prozess an
:
/*SP2*/
CREATE PROCEDURE dbo.delUserAll
als
festgelegt nocount on
begin
delete from dbo.[userinfo]
end
go
Diese gespeicherte Prozedur löscht alle Datensätze in der Userinfo-Tabelle ohne Eingabe oder Ausgabe. Aufruf Die Methode ist im Grunde die gleiche wie oben erwähnt, außer dass der Datensatz nicht abgerufen werden muss :
'**Rufen Sie die gespeicherte Prozedur über das Command-Objekt auf**
DIM MyComm
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr ist die Datenbank-Verbindungszeichenfolge
MyComm.CommandText = "delUserAll" 'Angeben der Name der gespeicherten Prozedur
MyComm.CommandType = 4 'Gibt an, dass es sich um eine gespeicherte Prozedur handelt.
MyComm.Prepared = true 'Erfordert, dass der SQL-Befehl zuerst kompiliert wird.
MyComm.Execute 'Der Datensatz muss hier nicht abgerufen werden.
Set MyComm = Nothing
Natürlich, Solche gespeicherten Prozeduren können auch über das Connection-Objekt oder Recordset-Objekt aufgerufen werden, aber das Recordset-Objekt wird erstellt, um das Recordset abzurufen. Wenn das Recordset nicht zurückgegeben wird, ist es besser, das Command-Objekt zu verwenden.
3.Bei der Ausführung von SP2-ähnlichen Vorgängen
solltengespeicherte Prozeduren mit Rückgabewerten
die leistungsstarken Transaktionsverarbeitungsfunktionen von SQL Server vollständig nutzen, um die Datenkonsistenz aufrechtzuerhalten.Darüber hinaus benötigen wir möglicherweise die gespeicherte Prozedur, um den Ausführungsstatus zurückzugeben. Ändern Sie dazu SP2 wie folgt:
/*SP3*/
CREATE PROCEDURE dbo.delUserAll
as
set nocount on
begin
BEGIN TRANSACTION
delete from dbo.[userinfo]
IF error= 0
begin
COMMIT TRANSACTION
return 1
end
ELSE
begin
ROLLBACK TRANSACTION
return 0
end
return
end
go
Die oben gespeicherte Prozedur gibt 1 zurück, wenn der Löschvorgang erfolgreich ausgeführt wurde, andernfalls gibt sie 0 zurück und führt einen Rollback-Vorgang aus. Um den Rückgabewert in ASP zu erhalten, müssen Sie die Parametersammlung verwenden, um die Parameter zu deklarieren:
„**Rufen Sie die gespeicherte Prozedur mit dem Rückgabewert auf und erhalten Sie den Rückgabewert**
DIM MyComm,MyPara
Set MyComm = Server.CreateObject ("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr ist die Datenbankverbindungszeichenfolge
MyComm.CommandText = "delUserAll" 'Geben Sie den Namen der gespeicherten Prozedur an.
MyComm.CommandType = 4 'Gibt an, dass es sich um eine gespeicherte Prozedur handelt.
MyComm.Prepared = true 'Erfordert, dass zuerst SQL-Befehle kompiliert werden
' Anweisung Rückgabewert
Set Mypara = MyComm.CreateParameter("RETURN",2,4)
MyComm.Parameters.Append MyPara
MyComm.Execute
'Rückgabewert abrufen
DIM retValue
retValue = MyComm(0) ' oder retValue = MyComm.Parameters(0)
Set MyComm = Nothing
In MyComm.CreateParameter("RETURN",2,4) ist die Bedeutung jedes Parameters wie folgt:
Der erste Parameter ("RETURE") ist der Parametername. Der Parametername kann beliebig festgelegt werden, im Allgemeinen sollte er jedoch mit dem in der gespeicherten Prozedur deklarierten Parameternamen identisch sein. Hier ist der Rückgabewert, den ich normalerweise auf „RETURE“ setze;
der zweite Parameter (2) gibt den Datentyp des Parameters an. Informationen zu spezifischen Typcodes finden Sie in der ADO-Referenz.
adBigint
:
adBary
:
adBooler
:
129
;
kann angenommen werden, und -1 bis -99 ist ein reservierter Wert;
der dritte Parameter (4) gibt die Art des Parameters an, wobei 4 angibt, dass es sich um einen Rückgabewert handelt. Die Beschreibung des Werts dieses Parameters lautet wie folgt:
0: Der Typ kann nicht bestimmt werden; 2: Eingabeparameter; 4: Rückgabewert;
der oben angegebene ASP-Code
;sei auch ein vollständiger Code Das ist der komplexeste Code. Tatsächlich
kannSet Mypara = MyComm.CreateParameter("RETURN",2,4)
MyComm.Parameters.Append MyPara
zuMyComm.Parameters.Append MyComm.CreateParameter(
vereinfacht werden
.„RETURN“,2,4)
oder sogar Sie können weiter vereinfachen, was später erklärt wird.
Gespeicherte Prozeduren mit Parametern können nur über das Command-Objekt aufgerufen werden (es gibt auch Informationen darüber, dass sie über das Connection-Objekt oder Recordset-Objekt aufgerufen werden können, aber ich habe es nicht ausprobiert).
4. Der Rückgabewert einer gespeicherten Prozedur mit Eingabeparametern und Ausgabeparametern
ist eigentlich ein spezieller Ausgabeparameter. In den meisten Fällen verwenden wir gespeicherte Prozeduren, die sowohl Eingabe- als auch Ausgabeparameter haben. Beispielsweise möchten wir den Benutzernamen eines Benutzers mit einer bestimmten ID in der Benutzerinformationstabelle erhalten. --user ID und ein Ausgabeparameter----user name. Die gespeicherte Prozedur zum Implementieren dieser Funktion lautet wie folgt:
/*SP4*/
CREATE PROCEDURE dbo.getUserName
@UserID int,
@UserName varchar(40) Ausgabe
als
set nocount on
begin,
wenn @UserID null ist, return
select @UserName=username
from dbo .[ userinfo]
where userid=@UserID
return
end
go
Der ASP-Code zum Aufrufen der gespeicherten Prozedur lautet wie folgt:
'**Rufen Sie die gespeicherte Prozedur mit Eingabe- und Ausgabeparametern auf**
DIM MyComm,UserID,UserName
UserID = 1
Set MyComm = Server.CreateObject(" ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr ist die Datenbankverbindungszeichenfolge
MyComm.CommandText = "getUserName" 'Geben Sie den Namen der gespeicherten Prozedur an.
MyComm.CommandType = 4 'Gibt an, dass es sich um eine gespeicherte Prozedur handelt
. MyComm. Prepared = true 'Erfordert SQL. Kompilieren Sie zuerst den Befehl
und deklarieren Sie die Parameter
MyComm.Parameters.append MyComm.CreateParameter("@UserID",3,1,4,UserID)
MyComm.Parameters.append MyComm.CreateParameter("@UserName", 200,2,40)
MyComm. Execute
'Parameter abrufen
UserName = MyComm(1)
Set MyComm = Nothing
Im obigen Code können Sie sehen, dass beim Deklarieren von Eingabeparametern im Gegensatz zur Deklaration des Rückgabewerts 5 Parameter erforderlich sind und 4 Parameter sind bei der Deklaration von Ausgabeparametern erforderlich. Bei der Deklaration von Eingabeparametern sind die fünf Parameter: Parametername, Parameterdatentyp, Parametertyp, Datenlänge und Parameterwert. Bei der Deklaration eines Ausgabeparameters gibt es keinen letzten Parameter: den Parameterwert.
Besonderes Augenmerk sollte darauf gelegt werden: Beim Deklarieren von Parametern muss die Reihenfolge mit der in der gespeicherten Prozedur definierten Reihenfolge übereinstimmen, und der Datentyp und die Länge jedes Parameters müssen ebenfalls mit denen übereinstimmen, die in der gespeicherten Prozedur definiert sind.
Wenn die gespeicherte Prozedur mehrere Parameter hat, erscheint der ASP-Code umständlich. Sie können den Befehl with verwenden, um den Code zu vereinfachen:
„**Eine gespeicherte Prozedur mit Eingabe- und Ausgabeparametern aufrufen (vereinfachter Code)**
DIM MyComm,UserID,UserName
UserID = 1
Set MyComm = Server.CreateObject("ADODB.Command")
mit MyComm
.ActiveConnection = MyConStr 'MyConStr ist die Datenbankverbindungszeichenfolge.CommandText
= "getUserName" 'Geben Sie den Namen der gespeicherten Prozedur an.CommandType
= 4 'Gibt an, dass dies der Fall ist eine gespeicherte Prozedur.Prepared
= true 'Erfordert, dass der SQL-Befehl zuerst kompiliert wird.Parameters.append
.CreateParameter("@UserID",3,1,4,UserID)
.Parameters.append .CreateParameter("@UserName",200, 2,40)
.Execute
end with
UserName = MyComm(1)
Set MyComm = Nothing
Wenn wir die Benutzernamen von 10 Benutzern mit den IDs 1 bis 10 erhalten möchten, müssen wir das Command-Objekt zehnmal erstellen? NEIN. Wenn Sie dieselbe gespeicherte Prozedur mehrmals aufrufen müssen, ändern Sie einfach die Eingabeparameter und Sie erhalten unterschiedliche Ausgaben:
„**Mehrere Aufrufe derselben gespeicherten Prozedur**
DIM MyComm,UserID,UserName
UserName = „“
Set MyComm = Server .CreateObject( "ADODB.Command")
für UserID = 1 bis 10
mit MyComm
.ActiveConnection = MyConStr 'MyConStr ist die Datenbankverbindungszeichenfolge.CommandText
= "getUserName" 'Geben Sie den Namen der gespeicherten Prozedur an.CommandType
= 4 'Gibt an, dass dies eine ist Stored procedure.Prepared
= true 'Erfordert, dass zuerst SQL-Befehle kompiliert werden
, wenn UserID = 1, dann
.Parameters.append .CreateParameter("@UserID",3,1,4,UserID)
.Parameters.append .CreateParameter("@UserName" ,200,2,40 )
.Execute
else
'Zuweisen Sie die Eingabeparameter neu zu (Eingabeparameter und Ausgabeparameter, deren Parameterwerte sich zu diesem Zeitpunkt nicht ändern, müssen nicht erneut deklariert werden)
.Parameters("@UserID") = UserID
.Execute
end if
end with
UserName = UserName + MyComm( 1) + "," 'Vielleicht möchten Sieals nächstes
ein Array zum Speichern verwenden
.
WieSie dem obigen Code entnehmen können: beim Aufrufen derselben gespeicherten Prozedur Wiederholt müssen Sie nur die Eingabeparameter neu zuweisen, deren Werte sich geändert haben. Diese Methode ist Wenn mehrere Eingabe- und Ausgabeparameter vorhanden sind und sich bei jedem Aufruf nur der Wert eines Eingabeparameters ändert, kann die Codemenge erhöht werden stark reduziert.
5. Gespeicherte Prozeduren, die gleichzeitig Rückgabewerte, Eingabeparameter und Ausgabeparameter haben. Wie
bereits erwähnt, muss beim Aufruf einer gespeicherten Prozedur die Reihenfolge, in der die Parameter deklariert werden, mit der in der gespeicherten Prozedur definierten Reihenfolge übereinstimmen . Ein weiterer Punkt, auf den Sie besonders achten sollten: Wenn die gespeicherte Prozedur sowohl einen Rückgabewert als auch Eingabe- und Ausgabeparameter hat, muss der Rückgabewert zuerst deklariert werden.
Um die aufrufende Methode in diesem Fall zu demonstrieren, verbessern wir das obige Beispiel. Erhalten Sie weiterhin den Benutzernamen des Benutzers mit der ID 1, aber es ist möglich, dass der Benutzer nicht existiert (der Benutzer wurde gelöscht und die Benutzer-ID ist ein sich selbst erhöhendes Feld). Die gespeicherte Prozedur gibt unterschiedliche Werte zurück, je nachdem, ob der Benutzer existiert oder nicht. Zu diesem Zeitpunkt lauten die gespeicherte Prozedur und der ASP-Code wie folgt:
/*SP5*/
CREATE PROCEDURE dbo.getUserName
- Um den Eindruck von „Sequenz“ zu vertiefen, kehren Sie die Definitionsreihenfolge der folgenden beiden Parameter
um @UserName varchar( 40) Ausgabe,
@UserID int
as
set nocount on
begin
wenn @UserID null ist return
select @UserName=username
from dbo.[userinfo]
where userid=@UserID
if rowcount> 0
return 1
else
return 0
return
end
go
'**The Der Aufruf hat sowohl einen Rückgabewert als auch eine Eingabe. Gespeicherte Prozeduren für Parameter und Ausgabeparameter**
DIM MyComm,UserID,UserName
UserID = 1
Set MyComm = Server.CreateObject("ADODB.Command")
mit MyComm
.ActiveConnection = MyConStr 'MyConStr ist die Datenbankverbindung string.CommandText
= "getUserName" 'Geben Sie den Namen der gespeicherten Prozedur an.CommandType
= 4 'Gibt an, dass es sich um eine gespeicherte Prozedur handelt
. Prepared = true 'Erfordert, dass der SQL-Befehl zuerst kompiliert wird.
' Der Rückgabewert muss zuerst deklariert werden.Parameters.Append
.CreateParameter("RETURN",2,4)
'Die Deklarationsreihenfolge der folgenden beiden Parameter wird ebenfalls entsprechend umgekehrt.Parameters.append
.CreateParameter("@UserName",200,2,40)
.Parameters.append .CreateParameter(" @UserID",3,1,4,UserID)
. Ausführen
end with
if MyComm(0) = 1 then
UserName = MyComm(1)
else
UserName = "Dieser Benutzer existiert nicht"
end if
Set MyComm = Nothing
6. Gespeicherte Prozeduren die gleichzeitig Parameter und Datensatzsätze zurückgeben.
Manchmal müssen gespeicherte Prozeduren gleichzeitig Parameter und Datensatzsätze zurückgeben. Wenn beispielsweise gespeicherte Prozeduren für Paging verwendet werden, müssen Parameter wie Datensatzsätze und Gesamtdatenvolumen gleichzeitig zurückgegeben werden Zeit. Das Folgende ist eine gespeicherte Prozedur für die Paging-Verarbeitung:
/*SP6*/
CREATE PROCEDURE dbo.getUserList
@iPageCount int OUTPUT, --Gesamtzahl der Seiten
@iPage int, --Aktuelle Seitenzahl
@iPageSize int --Anzahl der Datensätze pro Seite
as
set
nocount on
begin
–
Erstellen
Sie
eine
temporäre Tabelle
.
Benutzername von dbo.[UserInfo]
Sortierung nach Benutzer-ID
– Gesamtzahl der Datensätze abrufen
deklarieren @iRecordCount int
set @iRecordCount = rowcount
– Gesamtzahl der Seiten ermitteln
IF @iRecordCount%@iPageSize=0
SET @iPageCount=CEILING(@ iRecordCount/@iPageSize)
ELSE
SET @iPageCount=CEILING(@iRecordCount/@iPageSize)+1
– Wenn die angeforderte Seitenzahl größer als die Gesamtzahl der Seiten ist, wird die letzte Seite angezeigt.
IF @iPage > @iPageCount
SELECT @iPage = @iPageCount
--Bestimmen Sie die Anfangs- und Enddatensätze der aktuellen Seite
DECLARE @iStart int --start record
DECLARE @iEnd int --end record
SELECT @iStart = (@iPage - 1) * @iPageSize
SELECT @iEnd = @iStart + @iPageSize + 1
– Holen Sie sich den aktuellen Seitendatensatz,
wählen Sie * aus # t,
wobei ID>@iStart
und ID <@iEnd
– löschen Sie die temporäre Tabelle.
DROP TABLE #t
–geben Sie
die
Gesamtzahl der Datensätze
zurückGeben Sie in der oben genannten gespeicherten Prozedur die aktuelle Seitenzahl und die Anzahl der Datensätze pro Seite ein und geben Sie die aktuelle Seite zurück. Der Datensatz, die Gesamtzahl der Seiten und die Gesamtzahl der Datensätze. Typischer ausgedrückt wird die Gesamtzahl der Datensätze als Rückgabewert zurückgegeben. Das Folgende ist der ASP-Code, der die gespeicherte Prozedur aufruft (der spezifische Paging-Vorgang wird weggelassen):
'**Rufen Sie die gespeicherte Paging-Prozedur auf**
DIM pagenow,pagesize,pagecount,recordcount
DIM MyComm,MyRst
pagenow = Request("pn")
'Benutzerdefiniert Die Funktion wird verwendet, um natürliche Zahlen zu überprüfen,
wenn CheckNar(pagenow) = false, dann pagenow = 1,
Seitengröße = 20.
Set MyComm = Server.CreateObject("ADODB.Command")
mit MyComm
.ActiveConnection = MyConStr 'MyConStr ist die Datenbankverbindungszeichenfolge .CommandText
= "getUserList" 'Geben Sie den Namen der gespeicherten Prozedur an.CommandType
= 4 'Gibt an, dass es sich um eine gespeicherte Prozedur handelt
. Prepared = true 'Erfordert, dass zuerst SQL-Befehle kompiliert werden.
' Rückgabewert (Gesamtzahl der Datensätze)
.Parameters.Append. CreateParameter("RETURN",2,4 )
'Ausgabeparameter (Gesamtzahl der Seiten)
.Parameters.Append .CreateParameter("@iPageCount",3,2)
'Eingabeparameter (aktuelle Seitenzahl)
.Parameters.append .CreateParameter( "@iPage",3,1,4 ,pagenow)
'Eingabeparameter (Anzahl der Datensätze pro Seite)
.Parameters.append .CreateParameter("@iPageSize",3,1,4,pagesize)
Set MyRst = .Execute
end with
if MyRst.state = 0 then 'Keine Daten erhalten, MyRst close
recordcount = -1
else
MyRst.close 'Hinweis: Um den Parameterwert zu erhalten, müssen Sie zuerst das Datensatzobjekt schließen.
recordcount = MyComm(0)
pagecount = MyComm( 1)
if cint(pagenow)> =cint(pagecount) then pagenow=pagecount
end if
Set MyComm = Nothing
'Das Folgende zeigt den Datensatz an
, wenn Recordcount = 0, dann
Response.Write „No Record“,
sonst wenn RecordCount > 0,
dann
MyRst.open
bis MyRst.EOF
......
Schleife
'Das Folgende zeigt die Paging-Informationen an
...
else 'recordcount=-1
Response.Write "Parameterfehler"
end if
In Bezug auf den obigen Code gibt es nur einen Punkt, der sein muss erklärt: Wenn Sie den Datensatzsatz und die Parameter gleichzeitig zurückgeben und die Parameter erhalten möchten, müssen Sie zuerst den Datensatzsatz schließen und dann den Datensatzsatz öffnen, wenn Sie ihn verwenden.
7. Gespeicherte Prozeduren, die mehrere Datensatzsätze zurückgeben
In diesem Artikel werden zunächst die gespeicherten Prozeduren vorgestellt, die Datensatzsätze zurückgeben. Manchmal ist eine gespeicherte Prozedur erforderlich, um mehrere Datensatzsätze in ASP zurückzugeben. Wie erhält man diese Datensatzsätze gleichzeitig? Um dieses Problem zu veranschaulichen, fügen Sie der Tabelle „userinfo“ zwei Felder hinzu: „usertel“ und „usermail“ und legen Sie fest, dass nur angemeldete Benutzer diese beiden Inhalte anzeigen können.
/*SP7*/
PROZEDUR ERSTELLEN dbo.getUserInfo
@userid int,
@checklogin-Bit
als
Nocount am
Anfang
festlegen, wenn @userid null ist oder @checklogin null ist. Rückgabe
des Benutzernamens
aus dbo.[usrinfo],
wobei userid=@userid
--if Log in user, usertel und usermail abrufen
, wenn @checklogin=1
usertel,usermailvon dbo
auswählen
.[userinfo]where userid=@userid
return
end
goDas
Folgende ist der ASP-Code:
„**Rufen Sie eine gespeicherte Prozedur auf, die mehrere Datensatzsätze zurückgibt**
DIM checklg,UserID,UserName,UserTel,UserMail
DIM MyComm,MyRst
UserID = 1
'checklogin() ist eine benutzerdefinierte Funktion, um festzustellen, ob der Besucher angemeldet ist
checklg = checklogin()
Set MyComm = Server.CreateObject("ADODB.Command" )
mit MyComm
.ActiveConnection = MyConStr 'MyConStr ist die Datenbankverbindungszeichenfolge.CommandText
= "getUserInfo" 'Geben Sie den Namen der gespeicherten Prozedur an.CommandType
= 4 'Gibt an, dass es sich um eine gespeicherte Prozedur handelt.Prepared
= true 'Erfordert die Kompilierung des SQL-Befehls first.Parameters.append
.CreateParameter ("@userid",3,1,4,UserID)
.Parameters.append .CreateParameter("@checklogin",11,1,1,checklg)
Set MyRst = .Execute
end with
Set MyComm = Nothing
'Vom ersten Wert aus dem Datensatzsatz abrufen
UserName = MyRst(0)
'Wert aus dem zweiten Datensatz abrufen,
wenn nicht MyRst Nothing ist, dann
Set MyRst = MyRst.NextRecordset()
UserTel = MyRst(0)
UserMail = MyRst(1)
end if
Set MyRst = Nothing
Im obigen Code wird die NextRecordset-Methode des Recordset-Objekts verwendet, um mehrere von der gespeicherten Prozedur zurückgegebene Datensatzsätze abzurufen.
Bisher hat dieser Artikel eine relativ umfassende Erklärung verschiedener Situationen gegeben, in denen ASP gespeicherte Prozeduren aufruft. Lassen Sie uns abschließend über die verschiedenen Methoden zum Aufrufen mehrerer gespeicherter Prozeduren in einem ASP-Programm sprechen.
In einem ASP-Programm ist es möglich, mehrere gespeicherte Prozeduren auf mindestens die folgenden drei Arten aufzurufen:
1. Erstellen Sie mehrere Befehlsobjekte.
DIM MyComm
Set MyComm = Server.CreateObject("ADODB.Command")
'Gespeicherte Prozedur eins aufrufen
.. . ...
Set MyComm = Nothing
Set MyComm = Server.CreateObject("ADODB.Command")
'Gespeicherte Prozedur zwei aufrufen
...
Set MyComm = Nothing
...
2. Erstellen Sie nur ein Command-Objekt. Wenn Sie einen Aufruf beenden, löschen Sie dessen Parameter
DIM MyComm
Set MyComm = Server.CreateObject("ADODB.Command")
'Gespeicherte Prozedur eins aufrufen
...
'Parameter löschen (vorausgesetzt, es gibt drei Parameter)
MyComm.Parameters.delete 2
MyComm.delete 1
MyComm.Parameters. delete 0
'Rufen Sie die gespeicherte Prozedur zwei auf und löschen Sie die Parameter
...
Set MyComm = Nothing
Bitte beachten Sie zu diesem Zeitpunkt: Die Reihenfolge beim Löschen der Parameter ist entgegengesetzt zur Reihenfolge bei der Parameterdeklaration. Der Grund dafür ist, dass ich es nicht weiß .
3. Verwenden Sie die Refresh-Methode der Parameter-Datensammlung, um das Parameterobjekt zurückzusetzen.
DIM MyComm
Set MyComm = Server.CreateObject("ADODB.Command")
'Gespeicherte Prozedur eins aufrufen
...
'Alle in der Parameter-Datensammlung enthaltenen Parameterobjekte zurücksetzen
MyComm.Parameters.Refresh
'Gespeicherte Prozedur 2 aufrufen
...
Set MyComm = Nothing
Es wird allgemein angenommen, dass das wiederholte Erstellen von Objekten eine weniger effiziente Methode ist, aber nach dem Testen (das Testtool ist Microsoft Application Center Test) sind die Ergebnisse unerwartet:
Methode 2 > = Methode 1 >> Methode 3
Die Laufgeschwindigkeit von Methode 2 ist größer oder gleich der von Methode 1 (bis zu etwa 4 % höher). Die Laufgeschwindigkeit dieser beiden Methoden ist viel schneller als die von Methode 3 (bis zu 130). %), daher wird empfohlen, bei vielen Parametern Methode 1 zu verwenden; bei wenigen Parametern Methode 2 zu verwenden.
Es hat einen Tag gedauert, bis ich endlich einige meiner oberflächlichen Erfahrungen beim Aufruf gespeicherter Prozeduren in ASP niedergeschrieben habe. Bei manchen davon kenne ich nur die Wirkung, aber nicht die Ursache, und bei manchen mag es falsch sein, aber das ist alles das Ergebnis meiner persönlichen Praxis. Bitte nehmen Sie es kritisch hin, liebe Leser. Wenn Sie anderer Meinung sind, lassen Sie es mich bitte wissen. Vielen Dank im Voraus.