Vous êtes sur la page 1sur 15

ADO.NET 4.

5 ( Parte VI Transacciones)

Autor: Henry A. Mendoza Puerta ( HAMP )

I.- Introduccin Todas las aplicaciones manejan transacciones para ejecutar sus procesos, por tal motivo debemos tener mucho cuidado al momento de programarlas. Transacciones mal programadas generan inconsistencias en la sbases de datos y por lo tanto los reportes que se obtengan tambien seran inconsistentes, lo cual seria muy grave para la empresa. En este tutorial de mostrara ejemplos de transacciones controladas desde el cliente y transacciones de base de datos, dejando el tema de transacciones distribuidas para otra oportunidad. Aca dejo los enlaces a los anteriores tutoriales.
ADO NET 4.5 ( Parte I-Introduccion al ADO NET 4.5) ADO NET 4.5 ( Parte II-Creacion de Base de Datos Agencia en SQL Server)

ADO NET 4.5 ( Parte III-Desarrollo de Ejercicio Utilizando Asistente de Conexion-Clase SQLConnection) ADO NET 4.5 ( Parte IV-Consulta de Datos) ADO NET 4.5 ( Parte V Programacion en N-Capas)

II.- Transacciones
Una transaccion es un grupo de acciones que hacen transformaciones consistentes en las tablaspreservando la consistencia de la base de datos. Una base de datos esta en un estado consistente si obedece todas las restricciones de integridad definidas sobre ella. Los cambios de estado ocurren debido a actualizaciones, inserciones y eliminacion de datos. Se busca asegurar que la base de datos nunca entre en un estado de inconsistencia, sin embargo, durante la ejecucion de una transaccion la base de datos puede estar temporalmente en un estado inconsistente, tal como se muestra en la imagen. El punto importante aqui es asegurar que la base de datos regresa a un estado consistente al finalizar la ejecucion de una transaccion.

Lo que se persigue con el manejo de transacciones es por un lado tener una transparencia adecuada de las acciones concurrentes a una base de datos, y por otro lado tener una transparencia adecuada en el manejo de fallas que se pueden presentar en una base de datos.

III.- Propiedades de una Transaccion Una transaccion debe tener las propiedades ACID, que son las iniciales en ingles de las siguientes caracteristicas: Atomicity, Consistency, Isolation, Durability.
Atomicity ( Atomicidad): Una transaccion constituye una unidad atomica de ejecucion y se ejecuta exactamente una vez; o se realiza todo el trabajo o nada de el en absoluto. Consistency(Coherencia): Una transaccion mantiene la coherencia de los datos, transformando un estado coherente de datos en otro estado coherente de datos. Los datos enlazados por una transaccion deben conservarse semanticamente. Isolation(Aislamiento): Una transaccion es una unidad de aislamiento y cada una se produce aislada e independientemente de las transacciones concurrentes. Una transaccion nunca debe ver las fases intermedias de otra transaccion. Durability(Durabilidad): Uns transaccion es una unidad de recuperacion. Si una transaccion tiene exito, sus actualizaciones persiten, aun cuando falle el equipo o se apague. Si una transaccion no tiene exito, el sistema permanece en el estado anterior antes de la transaccion.

III.- Control de Transacciones. Para controlar transacciones tenemos tres tecnicas.


Transacciones controladas desde el cliente. Transacciones controladas desde procedimiento almacenado Transacciones Distribuidas.

a) Transacciones controladas desde el cliente. Son utilizadas en Sistemas Cliente- Servidor; las transacciones son inicadas y finalizadas con instrucciones que se ejecutan desde la aplicacion cliente, tal como se ilustra en la imagen.

Namespace System.Transactions El espacio de nombres System.Transactionscontiene clases que permiten escribir aplicaciones transaccionales y administradores de recursos propios. Concretamente, se puede crear una transaccion local o desde el cliente. Clase SQLTransaction: Representa una transaccion de Transact-SQL que se realiza en una base de datos de SQL Server. Esta clase no puede heredarse. La aplicacion crea un objeto SqlTransaction mediante una llamada a BeginTransaction en el objetoSqlConnection. Todas las operaciones siguientes asociadas a la transaccion( Por ejemplo, la confirmacion o anulacion de la transaccion) se realizan en el objetoSqlTransaction.
Sus principales propiedades son: Connection: Obtiene el objeto SqlConnection asociado a la transaccion o Nothing si la transaccion ya no es valida. DbConnection: Especifica el objeto DbConnection asociado a la transaccion. ( Se hereda de DbTransaction). IsolationLevel: Especifica el IsolationLevel para esta transaccion. Los principales metodos : Commit: Confirma la transaccion de base de datos.(Invalida a DbTransaction.Commit)

Dispose: Libera los recursos no administrados que utiliza DbTransaction( se hereda de DbTransaction). Finalize: Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por la recoleccion de elementos no utilizados. ( Se hereda de Object ). GetType: Obtiene el objeto Type de la instancia actual. ( Se hereda de Object). Rollback: Deshace una transaccion desde un estado pendiente. (Invalida a DbTransaction.Rollback)

Rollback(String): Deshace una transaccion con un estado pendiente y especifica el nombre de la transaccion o del punto de almacenamiento. ToString: Devuelve una cadena que representa el objeto actual. ( Se hereda de Object).

Propiedad SqlTransaction.IsolationLevel: Espeficica el IsolationLevel para esta transacction. No se admiten transacciones paralelar. Por lo tanto IsolationLevel se aplica a toda la transaccion.
Sus principales miembros son:

Metodo Commit: El metodo Commit es equivalente a la instruccion COMMIT TRANSACTION de Transact-SQL. No es posible deshacer una transaccion una vez que se ha confirmado porque todas las modificaciones ya se ha convertido en parte permanente de la base de datos. Metodo Rollback: Deshace una transaccion desde un estado pendiente. Este mienbro esta sobrecargado. Lista de sobrecarga
Rollback: Deshace DbTransaction.Rollback). una transaccion desde un estado pendiente. (Invalida a Rollback(String): Deshace una transaccion con un estado pendiente y especifica el nombre de la transaccion o del punto de almacenamiento.

Metodo BeginTransaction: Inicia una transaccion de base de datos. Este miembro esta sobrecargado. Lista de sobrecarga:
BeginTransaction: Inicia una transaccion de base de datos. BeginTransaction(IsolationLevel): Inicia una transaccion de base de datos con el nibel de aislamiento especifico. BeginTransaction(String): Inicia una transaccion de base de datos con el nombre de transaccion especificado. BeginTransaction(IsolationLevel,String): Inicia una transaccion de la base de datos con el nivel de aislamiento y el nombre de transaccion especificados. b) Transacciones controladas desde procedimiento almacenado.

Para este caso se utilizan procedimientos almacenados en la base de datos, y son estos los que toman el control de la transaccion. Por lo tanto, las transacciones son iniciadas y finalizadas con instrucciones que se ejecutan desde el procedimiento almacenado, tal como se ilustra en la siguiente imagen.

c) Transacciones distribuidas En este caso se utiliza un servidor de aplicaciones que se encarga de administrar la transaccion, tal como se ilustra en la imagen.

En este tipo de solucion el servidor de aplicaciones proporciona los componentes de software que controlan el acceso a los datos y las transacciones que se realizan. las fuentes de datos pueden ser una o mas bases de datos, incluso de diferentes proveedores.

IV.- Casos a Desarrollar Para el desarrollo de los siguientes ejercicios es necesario que tenga ya construido y funcionando el proyecto de N-Capas que se desarrollo en el tutorial ADO NET 4.5 ( Parte V Programacion en Capas). a) EJERCICIO 1: En este primer ejemplo se hara un registro de aerolinea, utilizando transacciones controladas desde la aplicacion.

Paso 01: Ingrese al SQL Server 2008, y en la base de datos AGENCIA, debe crear los siguientes procedimientos almacenados. Codigo sp_ListadoAerolineas

Codigo sp_Nuevaaerolinea

Luego que termina de escribir los procedimientos almacenados debe ejecutarlos para su creacion.

Paso 02: Agregar una clase de nombre ceAerolina, en el proyecto CapaEntidad.

Paso 03: Escribir el siguiente codigo en la clase ceAerolinea.

Paso 04: Agregar una clase de nombre AerolinaDAO, en el proyecto CapaDatos.

Paso 05: Escribir el siguiente codigo en la clase AerolineaDAO.

Paso 06: Agregar una clase de nombre AerolinaCN, en el proyecto CapaNegocio.

Paso 07: Escribir el siguiente codigo en la clase AerolineaCN.

Paso 07: Agregar un proyecto CapaPresentacion.

windows

forms

de

nombre frmRegistroAerolinea, en

el

Paso 08: El diseo del formulario es el siguiente

Paso 09: Ingrese el siguiente codigo en el formulario.

Paso 10: El formulario en ejecucion debera ser como se muestra en la imagen.

b) EJERCICIO 2: En este segundo ejemplo se hara la modificacion del procedimiento almacenado sp_Nuevaaerolinea, de tal manera que la transaccion se controle por medio del procedimiento almacenado. Paso 01: Elegir el procedimiento almacenado sp_Nuevaaerolinea, dar clic derecho ymodificar(Modify).

Luego que termina de modificar el procedimiento almacenado debe guardar los cambios dando clic en

Paso 02: Ingrese a la clase AerolinaDAO, y modifique el metodo NuevaAerolinea, como se muestra en la imagen. Puntualmente los cambios son que se elimina los usos del objeto Transaction.

V.- Conclusion
Con respecto a cual forma es la mejor, diria que el hecho de usar controlar transacciones en procedimiento almacenados tiene sus ventajas por los siguientes motivos. Reducen el trafico entre las aplicaciones y el servidor de base de datos porque en vez de enviar varios comandos SQL sin compilar, la aplicacion solo tiene que enviar el nombre del procedimiento almacenado y obtener el resultado de su ejecucion. Aumentan el rendimiento. Una vez creados, son compilados y almacenados en el catalogo de la base de datos. Corren mas rapido que comandos SQL enviados desde aplicaciones externas, ya que estos no estan compilados. Pero a su vez tiene las siguientes desventajas. Hacen que la base de datos sea mas pesada tanto para la memoria como para el procesador. En vez de estar concentrado en almacenar y devolver datos, uno puede estarle pidiendo al SGBD que realice varias operaciones logicas, la cual no es su funcion.no se recomienda colocar toda la logica en procedimientos almacenados, si no que podriamos colocar algunas sentencias SQL en la misma aplicacion, depende de la complejidad del comando SQL a ejecutar y cuando podria afectar en el redimiento ya sea de tu aplicacion y de tu gestor de base de datos.

Con respecto al codigo en un procedimiento almacenado solo se puede usar SQL declarativo, asi que es muy dificultoso escribir procedimientos complejos para negocios como en otros lenguajes de programacion tales como C#,java, etc.

Vous aimerez peut-être aussi