Conférence ASP 9 : ASP et base de données (4)
Auteur:Eve Cole
Date de mise à jour:2009-05-30 19:54:56
Dans cette conférence, nous présenterons principalement comment utiliser les paramètres et les procédures stockées.
1. Utilisez l'objet Command et l'objet Parameter pour transférer les paramètres. Cette conférence utilisera principalement la base de données Microsoft SQL Server7.0. Tout d'abord, créez un fichier de connexion AdoSQL7.asp pour la sauvegarde. Aucune instruction particulière ne sera donnée lors de son utilisation. avenir.
<% 'AdoSQL7.asp
Option explicite
Réponse.Expire = 0
'Partie 1 : Établir une connexion
Dim Cnn, StrCnn
Définir Cnn = Server.CreateObject("ADODB.Connection")
StrCnn = "Provider=sqloledb; ID utilisateur=sa; Mot de passe=; Catalogue initial=pubs; Source de données=ICBCZJP"
Cnn.Ouvrir StrCnn
%>
Remarque : lorsque vous l'utilisez vous-même, définissez la source de données sur le nom de la machine de votre serveur de base de données.
De plus, lors de l'utilisation de la base de données Access dans le passé, il était très pratique d'utiliser Microsoft Access97 pour afficher les champs et les données. Cependant, lors de l'utilisation de la base de données SQL Server, en particulier lors du débogage de scripts ASP, non pas sur le serveur de base de données mais sur une autre machine. nécessaire pour visualiser les champs et les données. Les données doivent être installées séparément. Voici un outil pour vous : Msqly32.exe (Microsoft Query) Ce fichier est installé avec Office97 et se trouve généralement dans le répertoire "Microsoft OfficeOffice".
Exemple wuf70.asp :
<%@ LANGUAGE="VBSCRIPT" %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<% ' wuf70.asp
Dim cmdTest, prmTest, rsTest
'Créer un objet Commande
Définir cmdTest = Server.CreateObject("ADODB.Command")
'Les objets Recordset et Command peuvent se connecter aux objets Connection via la propriété ActiveConnection.
cmdTest.ActiveConnection = Cnn
'Commande SQL - contient deux paramètres, utilisez-vous ? exprimer
cmdTest.CommandText = "Mettre à jour les tâches Définir job_desc = ? Où job_id = ?"
'Définissez le type de commande sur une instruction SQL
cmdTest.CommandType = adCmdText
L'attribut 'Prepared détermine s'il faut d'abord compiler la commande SQL. Le définir sur True peut accélérer l'exécution.
cmdTest.Prepared = Vrai
'Créer un objet paramètre
Définir prmTest=cmdTest.CreateParameter("job_desc",adVarChar,adParamInput,50,"network")
'Ajouter des données à la collection de données Paramètres
cmdTest.Parameters.Append prmTest
Définir prmTest = cmdTest.CreateParameter("job_id",adSmallInt,adParamInput,,"12")
cmdTest.Parameters.Append prmTest
'Exécuter les modifications - pas besoin de renvoyer les résultats, utilisez simplement cmdTest.Execute
cmdTest.Execute
'Réinitialiser les paramètres et exécuter - vous pouvez modifier une autre donnée
cmdTest.Parameters("id_travail") = "1"
cmdTest.Parameters("job_desc") = "Test"
cmdTest.Execute
'Réinitialiser les paramètres pour exécuter
cmdTest("id_travail") = "14"
cmdTest("job_desc") = "Finances"
cmdTest.Execute
Définir rsTest = Cnn.Execute("Sélectionnez job_id,job_desc à partir des travaux")
Bien que ce ne soit pas rsTest.EOF
Réponse.Écrire rsTest(0) & rsTest(1) & "<br>"
rsTest.MoveNext
Wende
Cnn.close : Définir prmTest = Rien
Définir cmdTest = Rien : Définir Cnn = Rien
%>
analyser:
1. La méthode CreateParameter de l'objet Command est utilisée pour créer des objets paramètres pour les commandes SQL ou les procédures stockées. Il existe cinq paramètres au total (les cinq paramètres sont facultatifs) :
Le premier paramètre : le nom de l'objet paramètre ;
Le deuxième paramètre : le type de données de l'objet paramètre, il y a trop de types, veuillez vous référer à l'aide ADO, ici adVarChar (valeur de chaîne), adSmallInt (entier signé sur 2 octets) ;
Le troisième paramètre : le type de paramètre. Peut être : adParamInput (indique un paramètre d'entrée), adParamOutput (indique un paramètre de sortie), adParamReturnValue (indique une valeur de retour), adParamUnknown (indique que le type de paramètre ne peut pas être déterminé), adParamInputOutput (indique un paramètre d'entrée/sortie) ;
Le quatrième paramètre : la longueur des données du paramètre. Il est préférable de la spécifier comme égale à la longueur du champ correspondant dans la base de données pour éviter les erreurs lors de son utilisation, notamment lorsque le type de données est VarChar s'il s'agit d'un entier ou. type de date, vous n’avez pas besoin de fournir cette valeur ;
Le cinquième paramètre : la valeur initiale du paramétrage.
2. La méthode cmdTest.Parameters.Append ajoute un objet Parameter à la collection de données Parameters. À partir de cet exemple, vous pouvez également voir comment utiliser plusieurs paramètres.
3. Comme vous pouvez le voir sur cet exemple, il vous suffit de réinitialiser les paramètres d'entrée pour modifier d'autres données, ce qui est très pratique. Cette idée est également l'une des méthodes les plus couramment utilisées en programmation.
4. Pour réinitialiser les paramètres, vous pouvez utiliser cmdTest.Parameters ou l'omettre comme cmdTest("job_id").
2. Utilisation de procédures stockées dans ASP. Qu'est-ce qu'une procédure stockée (une procédure stockée se trouve sur le serveur de base de données et est un ensemble d'instructions SQL pouvant contenir une ou plusieurs instructions SQL). le contenu de cette conférence. Cette conférence donne principalement des exemples pour illustrer comment appeler des procédures stockées dans ASP.
Les avantages de l'utilisation de procédures stockées sont importants. Les procédures stockées sont plus efficaces que l'exécution de commandes SQL dans des scripts ASP ; elles peuvent améliorer les performances globales et réduire la charge du réseau (en réduisant l'interaction entre le serveur réseau et le serveur de données) ; et améliorer la flexibilité du code, etc.
(1) Utilisation des paramètres d'entrée dans la procédure stockée La procédure stockée utilisée dans cet exemple est "byroyalty" fournie avec SQL Server 7.0. L'instruction SQL qu'elle contient est très simple. Ce n'est rien de plus qu'une CREATE PROCEDURE supplémentaire et une entrée. . Le paramètre est @percentage :
CRÉER UNE PROCÉDURE byroyalty @percentage int
COMME
sélectionnez au_id dans titleauthor
où titreauteur.royaltyper = @percentage
Exemple wuf71.asp
<% @LANGUAGE = VBScript %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<% ' wuf71.asp
Dim cmdTest, prmTest, rsTest
Définir cmdTest = Server.CreateObject("ADODB.Command")
cmdTest.CommandText = "byroyalty" 'Nom de la procédure stockée
'Définir le type de commande comme procédure stockée
cmdTest.CommandType = adCmdStoredProc
'Créer un objet paramètre
Définir prmTest = Server.CreateObject("ADODB.Parameter")
'L'attribut Type correspond au deuxième paramètre dans wuf70.asp
prmTest.Type = adInteger 'Entier signé de 4 octets' L'attribut de direction correspond au troisième paramètre dans wuf70.asp
prmTest.Direction = adParamInput
'L'attribut Value correspond au cinquième paramètre dans wuf70.asp
prmTest.Valeur = 30
cmdTest.Parameters.Append prmTest
Définir cmdTest.ActiveConnection = Cnn
'Vous devez renvoyer un jeu d'enregistrements, utilisez donc Set rsTest = cmdTest.Execute
Définir rsTest = cmdTest.Execute
Bien que ce ne soit pas rsTest.EOF
Réponse.Écrire rsTest(0) & "<br>"
rsTest.MoveNext
Wende
Cnn.close
Définir rsTest = Rien : Définir prmTest = Rien
Définir cmdTest = Rien : Définir Cnn = Rien
%>
La propriété CommandText peut spécifier une commande SQL, une procédure stockée ou un nom de table.
Dans cet exemple, la création d'un objet Parameter est légèrement différente de wuf70.asp. En fait, si vous regardez attentivement, la signification est similaire. Il y a deux attributs inutilisés dans cet exemple : prmTest.Name, prmTest.Size, plus Type, Direction. et Value, correspondant aux cinq paramètres de wuf70.asp.
(2) Lorsque vous utilisez des paramètres de sortie pour obtenir un enregistrement ou calculer une valeur à partir d'une table de base de données, vous devez utiliser une procédure stockée qui renvoie les paramètres de sortie. À titre d'exemple, créez d'abord une nouvelle procédure stockée OUTemploy dans la bibliothèque pubs de SQL Server. Cette procédure stockée doit saisir deux dates, puis générer une valeur maximale.
CRÉER UNE PROCÉDURE OUTemploy
(
@job_lvl tinyint SORTIE,
@hire_date1 dateheure,
@hire_date2 dateheure
)
COMME
sélectionnez @job_lvl = MAX(job_lvl) de l'employé
où Hire_date >= @hire_date1 et Hire_date <= @hire_date2
Il existe plusieurs manières de créer des procédures stockées :
1. Utilisez l'Enterprise Manager de Microsoft SQL Server. Après l'avoir ouvert, ouvrez-le dans le répertoire arborescent de gauche : Racine de la console – Microsoft SQL Servers – Groupe SQL Server – ICBCZJP (Windows NT) – bases de données – pubs – procédure stockée – Nouvelle procédure stockée. . Entrez la procédure stockée. Enfin, la détection de grammaire peut également être effectuée sur celle-ci ;
2. À l'aide de l'analyseur de requêtes de Microsoft SQL Server, connectez-vous d'abord au serveur de base de données et sélectionnez la base de données pubs. Entrez la procédure stockée ci-dessus et cliquez sur Exécuter la requête (ou appuyez sur F5) ;
3. Sous VB6.0, après avoir ouvert le menu "Affichage"/"Fenêtre d'affichage des données", cliquez avec le bouton droit sur "Data Link"/"New Data Link" ;
4. Utilisez le script ASP pour créer une procédure stockée, par exemple wuf75.asp :
<% @LANGUAGE = VBScript %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<% ' wuf75.asp
DimStrSQL
'Remarque : & Chr(10) & Chr(13) sont complètement inutiles, principalement pour la beauté.
StrSQL="CRÉER UNE PROCÉDURE OUTemploy ( @job_lvl tinyint OUTPUT, " & Chr(10) & Chr(13) &_
"@hire_date1 dateheure, @hire_date2 dateheure) AS " & Chr(10) & Chr(13) &_
"sélectionnez @job_lvl = MAX(job_lvl) de l'employé " &_
"où Hire_date >= @hire_date1 et Hire_date <= @hire_date2"
Cnn.Exécuter StrSQL
Response.Write "Créer avec succès une procédure stockée"
Cnn.close : Définir Cnn = Rien
%>
Une fois la procédure stockée créée, en plus d'utiliser le menu, vous pouvez également utiliser l'instruction SQL "Drop Procedure OUTemploy" pour la supprimer.
Exemple wuf72.asp – Envoyez les paramètres d'entrée requis à la procédure stockée et obtenez les résultats de sortie.
<% @LANGUAGE = VBScript %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<% ' wuf72.asp
Dim cmdTest, prmTest
Définir cmdTest = Server.CreateObject("ADODB.Command")
cmdTest.ActiveConnection = Cnn
cmdTest.CommandText = "OUTemploy" 'Nom de la procédure stockée
cmdTest.CommandType = adCmdStoredProc
'Créer un objet paramètre
Définir prmTest = cmdTest.CreateParameter("job_lvl",adTinyInt,adParamOutput)
cmdTest.Parameters.Append prmTest
'adTinyInt - entier signé de 1 octet
'adDbDate - valeur de la date (aaaammjj)
Définir prmTest = cmdTest.CreateParameter("hiredate1",adDBDate,adParamInput,,"1993-05-09")
cmdTest.Parameters.Append prmTest
Définir prmTest = cmdTest.CreateParameter("hiredate2",adDBDate,adParamInput,,"1994-02-01")
cmdTest.Parameters.Append prmTest
cmdTest.Execute
'Les trois expressions suivantes ont la même signification
Réponse.Write cmdtest("job_lvl") & "<br>"
Response.Write cmdTest.Parameters("job_lvl") & "<br>"
Response.Write cmdTest.Parameters("job_lvl").Value
Cnn.close
Définir prmTest = Rien
Définir cmdTest = Rien : Définir Cnn = Rien
%>
(3) Utilisez le paramètre de code de retour pour utiliser l'instruction Return afin de renvoyer différents codes de retour de la procédure stockée. Par exemple, la procédure stockée suivante obtient d'abord un jeu d'enregistrements, puis renvoie 1 s'il y a un employé nommé Margaret, sinon elle. renvoie 0.
Créer une procédure Retour emploi
COMME
sélectionnez emp_id, fname de l'employé
Si existe (Sélectionnez fname de l'employé où fname='Margaret')
Retour(1)
Autre
Retour(0)
Exemple wuf73.asp
<% @LANGUAGE = VBScript %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<%' wuf73.asp
Dim cmdTest, prmTest, rsTest
Définir cmdTest = Server.CreateObject("ADODB.Command")
cmdTest.ActiveConnection = Cnn
cmdTest.CommandText = "Returnemploy" 'Nom de la procédure stockée
cmdTest.CommandType = adCmdStoredProc
Définir prmTest = cmdTest.CreateParameter("ReturnValue",adInteger,adParamReturnValue)
cmdTest.Parameters.Append prmTest
Définir rsTest = cmdTest.Execute()
Bien que ce ne soit pas rsTest.EOF
Réponse.Écrire rsTest(0) & " ][ " & rsTest(1) & "<br>"
rsTest.MoveNext
Wende
rsTest.Close : définir rsTest = Rien
'Avant de renvoyer cmdtest("ReturnValue"), rsTest doit d'abord être fermé, sinon le résultat sera erroné
Si cmdtest("ReturnValue") = 1 Alors
Réponse. Écrivez « Il y a cet employé »
Autre
Réponse. Écrivez « Aucun employé de ce type »
Fin si
Cnn.close
Définir prmTest = Rien
Définir cmdTest = Rien : Définir Cnn = Rien
%>
3. Comment traiter le big data Le « big data » fait ici principalement référence aux champs Text (grand texte) et image (image), dont les données ne peuvent pas être obtenues correctement par la méthode décrite ci-dessus. Vous devez d'abord utiliser Size = rsTest(0).ActualSize pour obtenir la longueur réelle de la valeur du champ, puis utiliser rsTest(0).GetChunk(Size) pour obtenir les données. En utilisation réelle, ces champs étant relativement grands, afin d'économiser et d'utiliser rationnellement les ressources du serveur, une lecture segmentée est généralement adoptée. Exemple wuf74.asp :
<% @LANGUAGE = VBScript %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<% ' wuf74.asp
Faible StrSQL, rsTest
'pr_info est un champ de texte
StrSQL = "Sélectionnez pr_info,pub_id depuis pub_info"
Définir rsTest = Cnn.Execute(StrSQL)
Dim BasicSize, BeginSize, LText
Faire sans rsTest.EOF
Réponse.Écrivez rsTest(1) et "<br>"
'Lire 1024 octets à chaque fois
Taille de base = 1024
Taille de début = 0
Tandis que BeginSize < rsTest(0).ActualSize
LTexte = rsTest(0).GetChunk(BasicSize)
TailleDébut = TailleDébut + TailleBasique
'Sortie au client segment par segment
Réponse.Écrire LText
Wende
Réponse.Écrivez "<br><br>"
rsTest.MoveNext
Boucle
Cnn.close
Définir rsTest = Rien : Définir Cnn = Rien
%>
Dans cet exemple, un maximum de 1 024 octets sont lus à chaque fois et les données sont lues plusieurs fois. Au contraire, si vous écrivez du Big Data dans la base de données, la méthode est similaire à celle ci-dessus, mais au lieu d'utiliser la méthode GetChunk, vous utilisez la méthode AppendChunk :
rsTest(0).AppendChunkLtext
Remarque : Enfin, je vais vous présenter une petite astuce concernant la base de données SQL Server. Si vous avez rencontré cette situation : les données chinoises de la base de données sont affichées sous forme de caractères tronqués, ne paniquez pas. Il vous suffit d'aller sur mon site pour télécharger sqlsrv32.dll et d'écraser le fichier du même nom sous "C:WindowsSystem". La source du problème est le pilote SQL Server, qui se produit généralement sous Windows 98 Deuxième Édition (le numéro de version du pilote SQL Server est 3.70.06.23) ou Windows 2000 ou lorsque MDAC2.5 (le numéro de version est 3.70.08.20) est installé. .