Al desarrollar aplicaciones web, siempre es necesario acceder a la base de datos para completar operaciones como consultar, insertar, actualizar y eliminar datos. Afectado por la lógica de la aplicación, a veces es necesario combinar varias instrucciones de operación de la base de datos en una unidad de trabajo (transacción). En una base de datos, una transacción se refiere a un conjunto de unidades operativas lógicas que transforman datos de un estado a otro. Para garantizar la coherencia de los datos en la base de datos, los datos deben operarse en grupos discretos de unidades lógicas: cuando se completa todo, se puede mantener la coherencia de los datos, pero cuando falla parte de la operación en la unidad, toda la operación; La transacción se ignorará, todas las operaciones desde el punto de partida en adelante se devuelven al estado inicial.
De hecho, cada operación en la base de datos es implícitamente transaccional de forma predeterminada. Este artículo toma como ejemplo un programa típico de registro de usuarios para presentar tres métodos de uso de ASP para implementar el procesamiento de transacciones: una solución basada en componentes de base de datos ASP, una solución basada en el mecanismo de procesamiento de transacciones dentro de la base de datos y una solución basada en componentes MTS. .
Funciones del programa
Cree dos tablas en la base de datos de SQL Server: tabla USER y tabla USERDOC. La tabla USER almacena el nombre de usuario y la contraseña del usuario registrado, y la tabla USERDOC almacena la información personal del usuario registrado, indexada por el nombre de usuario. La siguiente es la definición de las tablas USER y USERDOC:
Crear tabla USUARIO (nombre de usuario varchar (30), contraseña de usuario varchar (30))
Crear tabla USERDOC (nombre de usuario varchar (30), edad int, sexo int, número de teléfono varchar (20), dirección varchar (50))
Cuando el usuario solicita el registro, el script ASP primero inserta el nombre de usuario y la contraseña en la tabla USER y luego en el USERDOC Inserte la información personal del usuario (edad, sexo, número de contacto, dirección particular, etc.) en la tabla. Al mismo tiempo, la aplicación también debe garantizar que cada registro en la tabla USER tenga un registro correspondiente en la tabla USERDOC.
El método 1 utiliza el objeto Connection en el componente ADO integrado de ASP para implementar el procesamiento transaccional de las operaciones de la base de datos. Algunos métodos del objeto Connection son los siguientes:
●Método Connection.BeginTrans: inicia una transacción;
●Método Connection.CommitTrans: completar/enviar una transacción;
●Método Connection.RollBackTrans: deshacer/abandonar una transacción.
//Iniciar una operación de transacción
<%Conn.BeginTrans%>
<% sqlText="Insertar en USUARIO(nombredeusuario,contraseñadeusuario) valores('" %>
<% sqlText=sqlText & request("usrName") & "','"&request("usrPasswd")&"') " %>
<% conexión.execute(sqlText) %>
<% si conn.Errors.Count>0 entonces %>
<% errores de conexión.Borrar %>
//Si la operación de inserción de datos falla, la transacción retrocede
<% conexión.RollBackTrans %>
<% respuesta.Redireccionar RegisterFail.html %>
<% finaliza si %>
<% sqlText="Insertar en USERDOC(nombre de usuario, edad, sexo, número de teléfono, dirección) "%>
<% sqlText=sqlText & "values('"& request ("usrName") & "', " & request("Edad") %>
<% sqlText=sqlText & ","'" & solicitud ("PhoneNum") & "','" %>
<% sqlText=sqlText & request("Dirección") & "') " %>
//Ejecutar la segunda instrucción de inserción en la unidad de transacción
<% conexión.execute(sqlText) %>
<% si conn.Errors.Count>0 entonces %>
<% errores de conexión.Borrar %>
//Si la operación falla, la transacción retrocede
<% conexión.RollBackTrans %>
<% respuesta.Redireccionar RegisterFail.html %>
<% finaliza si %>
//Si toda la operación de transacción se ejecuta correctamente, confirma la transacción
<% Conn.CommitTrans %>
//Ir a la página de procesamiento exitoso del registro
<% respuesta.Redireccionar RegisterOk.html %>
El método 2 puede utilizar el mecanismo de procesamiento de transacciones dentro del sistema de base de datos para completar el procesamiento de transacciones de operaciones de datos escribiendo procedimientos almacenados que contienen transacciones en el servidor de la base de datos. Al mismo tiempo, al utilizar el componente ADO para llamar al procedimiento almacenado, también puede determinar si la transacción se ejecuta correctamente en función del código de retorno del procedimiento almacenado.
En un sistema de base de datos, cada declaración SQL es una transacción. Por lo tanto, se garantiza que cada declaración se completará o volverá al principio. Sin embargo, si desea que las operaciones de un conjunto de declaraciones SQL se completen por completo o no sean válidas, debe utilizar el mecanismo de procesamiento de transacciones de la base de datos para lograrlo.
El código principal para generar el procedimiento almacenado en la base de datos es el siguiente:
Cree el proceso RegisterUser (@usrName varchar(30), @usrPasswd varchar(30),@age int, @PhoneNum varchar(20), @Address varchar(50)) como comienzo
//Mostrar definición e iniciar una transacción
comenzar tran
insertar en valores de USUARIO (nombre de usuario, contraseña de usuario) (@nombredeusuario, @contraseñadeusuario)
si @@error<>0
comenzar
//Si la operación falla, la transacción se revertirá
reversión tran
//Regresar al procedimiento almacenado y establecer el código de retorno para error en la operación de transacción
regresar -1
fin
insertar en USERDOC(nombre de usuario, edad, sexo, número de teléfono, dirección)
valores(@nombredeusuario,@edad,@número de teléfono,@dirección)
si @@error<>0
comenzar
//Si la operación falla, la transacción se revertirá
reversión tran
regresar -1
fin
//Si la operación se realiza correctamente, confirma la transacción
cometer tran
regresar 0
fin
El código principal para llamar al procedimiento almacenado de la base de datos en el script ASP es el siguiente:
<% Establecer comunicación=servidor.CrearObjeto
("ADODB.Comando") %>
<% Establecer Comm.ActiveConnection=conexión %>
<% Comm.CommandType=adCmdStoredProc %>
<% Comm.CommandText="RegistrarUsuario" %>
//Crear procedimiento almacenado para devolver el objeto de parámetro
<% Establecer RetCode=Comm.CreateParameter
("RetCode",adInteger,adParamReturnValue) %>
//Crear objeto de parámetro de entrada de procedimiento almacenado
<% Establecer usrName=Comm.CreateParameter ("usrName",adVarchar,adParamInput,30) %>
<% Establecer usrPwd=Comm.CreateParameter
("usrPasswd",adVarchar,adParamInput,30) %>
<% Establecer edad=Comm.CreateParameter("edad",adInteger,adParamInput) %>
<% Establecer número de teléfono=Comm.CreateParameter
("PhoneNum",adVarchar,adParamInput, 20) %>
<% Establecer dirección=Comm.CreateParameter("Dirección",adVarchar,adParamInput,50) %>
<% Parámetros de comunicación.Agregar nombreusuario %>
<% Comm.Parameters.Append usrPwd %>
<% Parámetros com. Edad anexada %>
<% Parámetros de comunicación.Agregar número de teléfono %>
<% Parámetros de comunicación.Agregar dirección %>
<% Comm.Parameters("usrName")=request("usrName") %>
<% Comm.Parameters("usrPasswd")=request("usrPasswd") %>
<% Comm.Parameters("edad")=request("edad") %>
<% Comm.Parameters("PhoneNum")=request("PhoneNum") %>
<% Comm.Parameters("Dirección")=request("Dirección") %>
<% Ejecución com.%>
<% ValorRet=Cint(Comm("RetCode")) %>
//Determina si el registro fue exitoso según el código de retorno del procedimiento almacenado de la base de datos
<% si RetValue< 0 entonces %>
<% respuesta.Redirect RegisterFail.html %>
<% más %>
<% respuesta.Redirect RegisterOk.html %>
<% finaliza si %>
Método 3: cuando se utiliza el mecanismo de procesamiento de transacciones del componente MTS (Microsoft Transaction Server) para implementar el procesamiento de transacciones, se debe prestar especial atención al hecho de que las transacciones bajo este mecanismo no pueden abarcar varias páginas ASP si una transacción requiere objetos de múltiples componentes. Debe combinar las operaciones sobre estos objetos en una página ASP.
Primero, debe agregar la directiva @TRANSACTION en la parte superior de la página para declarar una página ASP como transaccional.
La directiva @TRANSACTION debe estar en la primera línea de una página; de lo contrario, se generará un error. Cuando finaliza el procesamiento del script ASP en la página, finaliza la transacción actual.
<%@ TRANSACTION=Idioma requerido=
VBScript%>
//Evento desencadenado exitosamente por la ejecución de la transacción
<% Sub OnTransactionCommit() %>
<% respuesta.Redirect RegisterOk.html %>
<% Fin Sub %>
//Evento que se activa cuando algo no se ejecuta
<% Sub OnTransactionAbort() %>
<% respuesta.Redirect RegisterFail.html %>
<% Fin Sub %>
<% sqlText="Insertar en USUARIO(nombredeusuario,contraseñadeusuario) valores('" %>
<% sqlText=sqlText & request("usrName") & "','" &request("usrPasswd")&"') " %>
<% conexión.execute(sqlText) %>
<% si conn.Errors.Count>0 entonces %>
<% errores de conexión.Borrar %>
<% ObjectContext.SetAbort %>
<% finaliza si %>
<% sqlText="Insertar en USERDOC(nombre de usuario, edad, sexo, número de teléfono, dirección) "%>
<% sqlText=sqlText & "values('" & request("usrName")& "', " & request("Edad") %>
<% sqlText=sqlText & ","'" & solicitud("PhoneNum") & "','" %>
<% sqlText=sqlText & request("Dirección") & "') " %>
<% conexión.execute(sqlText) %>
<% si conn.Errors.Count>0 entonces %>
<% errores de conexión.Borrar %>
<% ObjectContext.SetAbort %>
<% finaliza si %>
<%ObjectContext.SetComplete%>
La solución es más flexible. El método de utilizar componentes de base de datos ASP tiene ciertas ventajas: puede utilizar componentes de base de datos ADO para completar el procesamiento de transacciones y también puede personalizar sus propios componentes de base de datos según las necesidades reales (siempre que cumplan con los componentes ASP). especificaciones de escritura) Can). Si considera la confiabilidad del procesamiento de transacciones de la base de datos, es mejor utilizar el procedimiento almacenado de procesamiento de transacciones dentro de la base de datos. De esta manera, el mecanismo de transacción de la base de datos se puede utilizar directamente para completar el procesamiento de transacciones lógicas de la aplicación, lo cual es seguro y confiable y reduce la interacción de datos entre el servidor web y el servidor de la base de datos. Esto es especialmente importante para los sistemas de bases de datos distribuidas. La ventaja del método de procesamiento de transacciones que utiliza componentes MTS es que el servidor MTS controla y administra directamente la finalización y deshacer de las operaciones de los componentes (componentes registrados en MTS). Tiene buen espacio de expansión y perspectivas de aplicación, y puede aprovechar al máximo los aspectos técnicos. ventajas de MTS Mejorar el rendimiento de tolerancia a fallos de las aplicaciones de red y mejorar el rendimiento dinámico de los servidores web IIS.