ASP.NET - La transacción no funciona bien

 
Vista:

La transacción no funciona bien

Publicado por Pableras (18 intervenciones) el 31/08/2006 09:20:10
Hola, qué tal ???

Mi problema es simple de entender (que no de resolver , al menos para mí :-( ). Tengo una transacción, en el que entre el BeginTransaction y el Commit tengo varias operaciones a realizar. Mi problema es que va haciendo las operaciones, pero si hay un fallo no hace el rollback, es decir, que si tenía que hacer 8 operaciones y ha dado fallo la operación 3, la 1 y la 2 se han "guardado" (son inserciones en base de datos lo que hago). Lo más curioso de todo es que la línea del RollBack la lee.

El programa lo que hace, más o menos, es copiar una estructura de árbol (con 5 niveles), en una tabla.

Mi código es algo parecido a esto (lo tengo en c# ):

// programa principal digamos:

........
tran=conn.BeginTransaction();
comm.Transaction=tran;

try
{
foreach(DataRow dr in SelectNiveles(5,.........).Rows)
{
niv5=InsertRow(.......,0)
foreach(DataRow dr in SelectNiveles(4,.........).Rows)
{
niv4=InsertRow(.......,niv4)
foreach(DataRow dr in SelectNiveles(3,.........).Rows)
// Así seguiría hasta llegar al nivel 1
}
}

tran.Commit();
}
catch
{
tran.RollBack();
throw Exception("..................")
}

// función SelectNiveles

utilizo el comm (general) , un DataAdapter (local) y un DataSet(local) para rellenar una tabla del DataSet.
La función devuelve la tabla del DataSet.

// función InsertRow

// Esta función devuelve el nuevo id de la fila que vamos a introducir

.......
id=comm.ExecuteScalar(); // Saca el máximo 'id' en una tabla concreta
id++;
.......
comm.ExecuteNonQuery(); // Una vez que el nuevo índice, inserto la fila.
return id;

A lo mejor he tenido algún fallo de sintaxis aquí, pero en el Visual está bien escrito todo, y la solución se genera perfectamente.

La transacción y el command son globales ( he probado a poner otros command locales y globales y nada )

Qué puede pasar ???? ... hay problemas con el ámbito de algunas variables: comm, etc ??? ...no sé....

Graciasssssssssssssssssssssssssssssss
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder