Lors du développement d'applications Web, il est invariablement nécessaire d'accéder à la base de données pour effectuer des opérations telles que l'interrogation, l'insertion, la mise à jour et la suppression de données. Affecté par la logique de l'application, il est parfois nécessaire de combiner plusieurs instructions d'opération de base de données en une unité de travail (transaction). Dans une base de données, une transaction fait référence à un ensemble d'unités opérationnelles logiques qui transforment les données d'un état à un autre. Pour garantir la cohérence des données dans la base de données, les données doivent être traitées dans des groupes discrets d'unités logiques : lorsque tout est terminé, la cohérence des données peut être maintenue, mais lorsqu'une partie de l'opération dans l'unité échoue, l'intégralité ; La transaction sera ignorée, toutes les opérations à partir du point de départ seront renvoyées à l'état de départ.
En fait, chaque opération sur la base de données est implicitement transactionnelle par défaut. Cet article prend comme exemple un programme d'enregistrement d'utilisateur typique pour présenter trois méthodes d'utilisation d'ASP pour implémenter le traitement des transactions : une solution basée sur les composants de la base de données ASP, une solution basée sur le mécanisme de traitement des transactions au sein de la base de données et une solution basée sur les composants MTS. .
Fonctions du programme
Créez deux tables dans la base de données SQL Server : la table USER et la table USERDOC. La table USER stocke le nom d'utilisateur et le mot de passe de l'utilisateur enregistré, et la table USERDOC stocke les informations personnelles de l'utilisateur enregistré, indexées par le nom d'utilisateur. Voici la définition des tables USER et USERDOC :
Créer une table USER (nom d'utilisateur varchar (30), mot de passe utilisateur varchar (30))
Créer une table USERDOC(userName varchar(30),Age int,Sex int,PhoneNumber varchar(20),Address varchar(50))
Lorsque l'utilisateur demande l'enregistrement, le script ASP insère d'abord le nom d'utilisateur et le mot de passe dans la table USER, puis dans le USERDOC Insérez les informations personnelles de l'utilisateur (âge, sexe, numéro de contact, adresse du domicile, etc.) dans le tableau. Dans le même temps, l'application doit également s'assurer que chaque enregistrement de la table USER a un enregistrement correspondant dans la table USERDOC.
La méthode 1 utilise l'objet Connection dans le composant ADO intégré à ASP pour implémenter le traitement transactionnel des opérations de base de données. Certaines méthodes de l'objet Connection sont les suivantes :
●Méthode Connection.BeginTrans : démarrer une transaction ;
●Méthode Connection.CommitTrans : terminer/soumettre une transaction ;
●Méthode Connection.RollBackTrans : Annuler/abandonner une transaction.
//Démarrer une opération de transaction
<%Conn.BeginTrans%>
<% sqlText="Insérer dans les valeurs USER(userName,userPasswd)('" %>
<% sqlText=sqlText & request("usrName") & "','"&request("usrPasswd")&"') " %>
<% conn.execute(sqlText) %>
<% si conn.Errors.Count>0 alors %>
<% conn.Errors.Clear %>
//Si l'opération d'insertion de données échoue, la transaction revient en arrière
<% conn.RollBackTrans %>
<% réponse.Redirection RegisterFail.html %>
<% fin si %>
<% sqlText="Insérer dans USERDOC(userName,Age,Sex,PhoneNumber,Address) "%>
<% sqlText=sqlText & "values('"& request ("usrName") & "', " & request("Age") %>
<% sqlText=sqlText & ","'" & requête ("PhoneNum") & "','" %>
<% sqlText=sqlText & request("Address") & "') " %>
//Exécuter la deuxième instruction d'insertion dans l'unité de transaction
<% conn.execute(sqlText) %>
<% si conn.Errors.Count>0 alors %>
<% conn.Errors.Clear %>
//Si l'opération échoue, la transaction revient en arrière
<% conn.RollBackTrans %>
<% réponse.Redirection RegisterFail.html %>
<% fin si %>
//Si toute l'opération de transaction est exécutée correctement, validez la transaction
<% Conn.CommitTrans %>
// Accédez à la page de traitement de la réussite de l'inscription
<% réponse.Redirection RegistreOk.html %>
La méthode 2 peut utiliser le mécanisme de traitement des transactions au sein du système de base de données pour terminer le traitement des opérations de données en écrivant des procédures stockées contenant des transactions dans le serveur de base de données. Dans le même temps, en utilisant le composant ADO pour appeler la procédure stockée, vous pouvez également déterminer si la transaction est exécutée avec succès en fonction du code retour de la procédure stockée.
Dans un système de base de données, chaque instruction SQL est une transaction. Par conséquent, il est garanti que chaque instruction se terminera ou reviendra au début. Cependant, si vous souhaitez que les opérations d'un ensemble d'instructions SQL soient toutes terminées ou toutes invalides, vous devez utiliser le mécanisme de traitement des transactions de la base de données pour y parvenir.
Le code principal pour générer la procédure stockée dans la base de données est le suivant :
Créez proc RegisterUser (@usrName varchar(30), @usrPasswd varchar(30),@age int, @PhoneNum varchar(20), @Address varchar(50) ) au début
//Afficher la définition et démarrer une transaction
commencer la trans
insérer dans les valeurs USER (userName, userPasswd) (@usrName, @usrPasswd)
si @@erreur<>0
commencer
//Si l'opération échoue, la transaction sera annulée
annulation de la transmission
//Retour à la procédure stockée et définit le code retour sur échec de l'opération de transaction
retour -1
fin
insérer dans USERDOC (nom d'utilisateur, âge, sexe, numéro de téléphone, adresse)
valeurs (@Usrname,@age,@PhoneNum,@Address)
si @@erreur<>0
commencer
//Si l'opération échoue, la transaction sera annulée
annulation de la transmission
retour -1
fin
//Si l'opération est effectuée correctement, validez la transaction
commettre une trans
retourner 0
fin
Le code principal pour appeler la procédure stockée de base de données dans le script ASP est le suivant :
<% Set Comm=server.CreateObject
("ADODB.Command") %>
<% Set Comm.ActiveConnection=conn %>
<% Comm.CommandType=adCmdStoredProc %>
<% Comm.CommandText="RegisterUser" %>
//Créer une procédure stockée pour renvoyer l'objet paramètre
<% Set RetCode=Comm.CreateParameter
("RetCode", adInteger, adParamReturnValue) %>
//Créer un objet de paramètre d'entrée de procédure stockée
<% Set usrName=Comm.CreateParameter ("usrName",adVarchar,adParamInput,30) %>
<% Set usrPwd=Comm.CreateParameter
("usrPasswd", adVarchar, adParamInput,30) %>
<% Set age=Comm.CreateParameter("age",adInteger,adParamInput) %>
<% Set PhoneNum=Comm.CreateParameter
("NumTéléphone", adVarchar, adParamInput, 20) %>
<% Set Address=Comm.CreateParameter("Address",adVarchar,adParamInput,50) %>
<% Comm.Parameters.Append usrName %>
<% Comm.Parameters.Append usrPwd %>
<% Comm.Parameters.Append âge %>
<% Comm.Parameters.Append PhoneNum %>
<% Comm.Parameters.Append Adresse %>
<% Comm.Parameters("usrName")=request("usrName") %>
<% Comm.Parameters("usrPasswd")=request("usrPasswd") %>
<% Comm.Parameters("age")=request("age") %>
<% Comm.Parameters("PhoneNum")=request("PhoneNum") %>
<% Comm.Parameters("Adresse")=request("Adresse") %>
<% Comm.Execute %>
<% RetValue=Cint(Comm("RetCode")) %>
// Détermine si l'enregistrement réussit en fonction du code de retour de la procédure stockée de la base de données
<% si RetValue< 0 alors %>
<% réponse.Redirect RegisterFail.html %>
<% autre %>
<% réponse.Redirection RegistreOk.html %>
<% fin si %>
Méthode 3 : lors de l'utilisation du mécanisme de traitement des transactions du composant MTS (Microsoft Transaction Server) pour implémenter le traitement des transactions, une attention particulière doit être accordée au fait que les transactions sous ce mécanisme ne peuvent pas s'étendre sur plusieurs pages ASP si une transaction nécessite des objets provenant de plusieurs composants. , Vous devez combiner les opérations sur ces objets dans une page ASP.
Tout d'abord, vous devez ajouter la directive @TRANSACTION en haut de la page pour déclarer une page ASP comme transactionnelle.
La directive @TRANSACTION doit être sur la première ligne d'une page, sinon une erreur sera générée. Lorsque le traitement du script ASP dans la page se termine, la transaction en cours se termine.
<%@ TRANSACTION=Langue requise=
VBScript%>
//Événement déclenché avec succès par l'exécution de la transaction
<% Sub OnTransactionCommit() %>
<% réponse.Redirection RegistreOk.html %>
<% Fin sous %>
//Événement déclenché lorsque les choses ne s'exécutent pas
<% Sub OnTransactionAbort() %>
<% réponse.Redirect RegisterFail.html %>
<% Fin sous %>
<% sqlText="Insérer dans les valeurs USER(userName,userPasswd)('" %>
<% sqlText=sqlText & request("usrName") & "','" &request("usrPasswd")&"') " %>
<% conn.execute(sqlText) %>
<% si conn.Errors.Count>0 alors %>
<% conn.Errors.Clear %>
<% ObjectContext.SetAbort %>
<% fin si %>
<% sqlText="Insérer dans USERDOC(userName,Age,Sex,PhoneNumber,Address) "%>
<% sqlText=sqlText & "values('" & request("usrName")& "', " & request("Age") %>
<% sqlText=sqlText & ","'" & request("PhoneNum") & "','" %>
<% sqlText=sqlText & request("Address") & "') " %>
<% conn.execute(sqlText) %>
<% si conn.Errors.Count>0 alors %>
<% conn.Errors.Clear %>
<% ObjectContext.SetAbort %>
<% fin si %>
<% ObjectContext.SetComplete %>
La solution est plus flexible.La méthode d'utilisation des composants de base de données ASP présente certains avantages : vous pouvez utiliser les composants de base de données ADO pour terminer le traitement des transactions, et vous pouvez également personnaliser vos propres composants de base de données en fonction des besoins réels (à condition qu'ils répondent aux composants ASP). rédaction des spécifications) Can). Si vous considérez la fiabilité du traitement des transactions de la base de données, il est préférable d'utiliser la procédure stockée de traitement des transactions à l'intérieur de la base de données. De cette manière, le mécanisme de transaction de base de données peut être directement utilisé pour terminer le traitement transactionnel logique de l'application, ce qui est sûr et fiable, et réduit l'interaction des données entre le serveur Web et le serveur de base de données. Ceci est particulièrement important pour les systèmes de bases de données distribuées. L'avantage de la méthode de traitement des transactions utilisant les composants MTS est que le serveur MTS contrôle et gère directement l'achèvement et l'annulation des opérations des composants (composants enregistrés dans MTS). avantages de MTS. Améliorez les performances de tolérance aux pannes des applications réseau et améliorez les performances dynamiques des serveurs Web IIS.