Transacción SQL y C#

17/01/2006 - 18:00 por Matías | Informe spam
tengo la siguiente problemática:

Necesito hacer una transacción en base de datos en que son varios insert y
debo corroborar que se realicen todos, una forma es en un procedimiento
almacenado con Begin Tran . Commit, y se podría hacer así, pero no me
sirve esa solución.

Tengo implementados varias funciones que en c# que llaman a procedimientos
almacenados distintos, la idea que es se sigan llamandos estos procemientos,
pero si falla alguna de las llamadas haga un RollBack, alguien me puede
orientar.

Gracias de antemano.
 

Leer las respuestas

#1 JavierBolivia
17/01/2006 - 18:42 | Informe spam
Hola Matías, efectivamente el .net framework sí brinda una solución a tu
problema: cada conjunto de proveedores de datos tiene un objecto transacción
correspondiente, que se puede crear y usar de la siguiente manera (pongo como
ejemplo el proveedor para Sql, pero la lógica es la misma para Oracle, OleDb,
etc):

SqlConection conexion=new SqlConection(stringConexion);
conexion.Open();
SqlTransaction tran=conexion.BeginTransaction();


tran.Commit(); // en caso de éxito
tran.RollBack(); // en caso de error; típicamente se pone dentro de un catch

conexion.Close();

La restricción principal es que la transacción sólo puede estar asociada a
una única conexión a la base de datos, y ésta debe a su vez debe estar
abierta durante todo el tiempo de vida de la transacción. Esto en tu caso
presenta trabajo adicional, ya que como llamas a procedimientos almacenados
en distintos métodos, tienes a mi juicio dos alternativas:

- Llevar todos las llamadas a proc. alm. dentro de un mismo método y realizar
algo parecido al ejemplo de arriba.
- Abrir una conexión y crear una transacción antes de empezar las llamadas a
los métodos, y pasar ambos objetos por referencia a todos los métodos
respectivos. Al final de todas las llamadas a los métodos, hacer commit o
rollback dependiendo de los resultados y cerrar la conexión.

Espero que te sirva de ayuda. Saludos,

Javier Pelaez
Microsoft MCAD .NET
DCE5 v.2003 - DCE2 v.2005


"Matías" escribió:

tengo la siguiente problemática:

Necesito hacer una transacción en base de datos en que son varios insert y
debo corroborar que se realicen todos, una forma es en un procedimiento
almacenado con Begin Tran . Commit, y se podría hacer así, pero no me
sirve esa solución.

Tengo implementados varias funciones que en c# que llaman a procedimientos
almacenados distintos, la idea que es se sigan llamandos estos procemientos,
pero si falla alguna de las llamadas haga un RollBack, alguien me puede
orientar.

Gracias de antemano.




Preguntas similares