Plusieurs façons pour ASP d'appeler des procédures stockées avec des paramètres
Récemment, de nombreux amis ont posé des questions sur l'appel de procédures stockées. Voici une brève introduction à plusieurs façons pour ASP d'appeler des procédures stockées avec des paramètres.
1. C'est aussi la méthode la plus simple, avec deux paramètres d'entrée et aucune valeur de retour :
définir la connexion = server.createobject("adodb.connection")
connection.open someDSN
Connection.Execute "procname varvalue1, varvalue2"
'Effacer tous les objets et libérer les ressources
connexion.fermer
définir la connexion = rien
2. Si vous souhaitez renvoyer l'ensemble Recordset :
définir la connexion = server.createobject("adodb.connection")
connection.open someDSN
set rs = serveur.createobject("adodb.recordset")
rs.Open "Exec procname varvalue1, varvalue2", connexion
'Effacer tous les objets et libérer les ressources
rs.fermer
connexion.fermer
setrs = rien
définir la connexion = rien
3. Aucune des deux méthodes ci-dessus ne peut avoir de valeur de retour (sauf Recordset). Si vous souhaitez obtenir la valeur de retour, vous devez utiliser la méthode Command.
Tout d’abord, il existe deux types de valeurs de retour. L'une consiste à renvoyer directement une valeur dans la procédure stockée, tout comme la valeur de retour de la fonction C et VB ; l'autre consiste à renvoyer plusieurs valeurs, et les noms de variables pour stocker ces valeurs doivent d'abord être spécifiés dans les paramètres d'appel. .
Cet exemple doit gérer plusieurs paramètres, des paramètres d'entrée, des paramètres de sortie, des jeux d'enregistrements de retour et une valeur de retour directe (est-il suffisamment complet ?)
La procédure stockée est la suivante :
utiliser pubs
GO
-- Créer une procédure stockée
créer une procédure sp_PubsTest
-- définir trois variables de paramètre, faites attention à la troisième, la marque spéciale est pour la sortie
@au_lname varchar (20),
@intID entier,
@intIDOut int SORTIE
AS
SELECT @intIDOut = @intID + 1
SELECT *
DES auteurs
WHERE au_lname LIKE @au_lname + '%'
--Renvoyer directement une valeur
RETOUR @intID + 2
Le programme asp qui appelle cette procédure stockée est le suivant :
<%@ Language=VBScript %>
<%
Dim CmdSP
DimadoRS
Dim adCmdSPStoredProc
Dim adParamReturnValue
Dim adParaminput
Dim adParamOutput
Dim adInteger
Dim iVal
Dim oVal
Dim adoField
Dim adVarChar
'Ces valeurs sont des constantes prédéfinies en VB et peuvent être appelées directement, mais elles ne sont pas prédéfinies en VBScript
adCmdSPStoredProc = 4
adParamReturnValue = 4
adParaminput = 1
adParamOutput = 2
adEntier = 3
adVarChar = 200
iVal = 5
oVal = 3
'Créer un objet commande
set CmdSP = Server.CreateObject("ADODB.Command")
'Créer un lien
CmdSP.ActiveConnection = "Driver={SQL Server};server=(local);Uid=sa;Pwd=;Database=Pubs"
'Définir le nom d'appel de l'objet de commande
CmdSP.CommandText = "sp_PubsTest"
'Définissez le type d'appel de commande comme étant une procédure stockée (adCmdSPStoredProc = 4)
CmdSP.CommandType = adCmdSPStoredProc
'Ajouter des paramètres à l'objet de commande
'Définissez la procédure stockée pour avoir une valeur de retour directe, et c'est un entier. La valeur par défaut est 4.
CmdSP.Parameters.Append CmdSP.CreateParameter("RETURN_VALUE", adInteger, adParamReturnValue, 4)
'Définir un paramètre de saisie de caractères
CmdSP.Parameters.Append CmdSP.CreateParameter("@au_lname", adVarChar, adParaminput, 20, "M")
'Définir un paramètre d'entrée entier
CmdSP.Parameters.Append CmdSP.CreateParameter("@intID", adInteger, adParamInput, , iVal)
'Définir un paramètre de sortie entier
CmdSP.Parameters.Append CmdSP.CreateParameter("@intIDOut", adInteger, adParamOutput, oVal)
'Exécutez la procédure stockée et obtenez le jeu d'enregistrements renvoyé
Définir adoRS = CmdSP.Execute
'Imprimez chaque enregistrement. Les champs sont virtuels et peuvent être ignorés.
Bien que ce ne soit pas adoRS.EOF
pour chaque adoField dans adoRS.Fields
Response.Write adoField.Name & "=" & adoField.Value & "<br>" & vbCRLF
Suivant
Réponse.Écrivez "<br>"
adoRS.MoveNext
Wend
'Imprime deux valeurs de sortie :
Response.Write "<p>@intIDOut = " & CmdSP.Parameters("@intIDOut").Value & "</p>"
Response.Write "<p>Valeur de retour = " & CmdSP.Parameters("RETURN_VALUE").Value & "</p>"
'Nettoyage général
Définir adoRS = rien
Définir CmdSP.ActiveConnection = rien
Définir CmdSP = rien
%>
-------------------------------------------------- -------------------------------------------------- --------------------------------
L'appel de la procédure stockée du serveur SQL en asp peut accélérer la vitesse d'exécution du programme
1. Appelez le stockage La méthode générale du processus suppose qu'il existe une procédure stockée dt_users dans le serveur SQL :
CRÉER UNE PROCÉDURE [dbo].[dt_users]
COMME
sélectionnez * parmi les utilisateurs
retour
ALLER
La première méthode ne consiste pas à utiliser l'objet command, mais directement à utiliser l'objet recordset.
set rs=server.createobject("adodb.recordset")
sql="exec dt_users"
rs.open sql,conn,1,1 pour que la deuxième méthode consiste à utiliser l'objet de commande
set comm=server.createobject("adodb.command")
comm.commandtype=4
définir comm.activeconnection=conn
comm.commandtext="dbo.dt_users"
set rs=server.createobject("adodb.recordset")
rs.open comm,,1,1
2. Transmettez les paramètres à la procédure stockée S'il n'y a pas de paramètres dans la procédure stockée, mais une seule instruction SQL, l'avantage d'appeler la procédure stockée ne sera pas affiché !
Par exemple, pour une requête bbs, vous pouvez effectuer une requête par auteur et par sujet ! Ensuite, vous pouvez créer une procédure stockée comme suit :
Le paramètre mot-clé est le mot-clé et Choose est la méthode de sélection de la requête.
CRÉER UNE PROCÉDURE [dbo].[dt_bbs]
@keyword varchar(20)=null,
@choisissez int=null
comme
si @choose=1
sélectionnez * parmi bbs où le nom est comme @keyword
autre
sélectionnez * parmi les bbs où le sujet est comme @keyword
retour
aller
De cette façon, lorsque nous appelons la procédure stockée, il suffit de transmettre les paramètres, au lieu d'écrire un programme en asp et d'utiliser la première méthode :
set rs=server.createobject("adodb.recordset")
sql="exec dt_bbs '"&mot-clé&"',"&choisir&""
rs.open sql, conn, 1,1
Utilisez la deuxième méthode :
set comm=server.createobject("adodb.command")
comm.commandtype=4
comm.Parameters.append comm.CreateParameter("@keyword",adChar,adParamInput,50,keyword)
comm.Parameters.append comm.CreateParameter("@keyword",adInteger,adParamInput,,choose)
définir comm.activeconnection=conn
comm.commandtext="dbo.dt_bbs"
set rs=server.createobject("adodb.recordset")
rs.CursorType = 3
rs.open comm,,1,1