Transaccion solo se puede deshacer desde un estado pendiente

17/12/2006 - 03:24 por Cristiancito | Informe spam
Estimados:

Intento realizar un rollback al salir de un formulario a una
transaccion de una conexion global de la aplicación. Sin embargo hay
veces en que el sistema me indica el siguiente error:

"La transacción sólo se puede deshacer desde un estado pendiente
(después de haber llamado a BeginTransaction, pero antes de llamar a
Commit)".

La pregunta es ¿Como puedo saber que esto por código antes de
ejecutar el Rollback y no se produzca error?.

Atte.

Cristian.
 

Leer las respuestas

#1 Leonardo Azpurua [mvp vb]
17/12/2006 - 03:43 | Informe spam
"Cristiancito" escribió en el mensaje
news:

Intento realizar un rollback al salir de un formulario a una
transaccion de una conexion global de la aplicación. Sin embargo hay
veces en que el sistema me indica el siguiente error:

"La transacción sólo se puede deshacer desde un estado pendiente
(después de haber llamado a BeginTransaction, pero antes de llamar a
Commit)".

La pregunta es ¿Como puedo saber que esto por código antes de
ejecutar el Rollback y no se produzca error?.


Hola Christiancito,


Rollback es exactamente lo contrario de Commit. Exactamente lo contrario
significa que si ejecutas el Rollback es porque no puedes ejecutar el
Commit, y si ejecutas el Commit no necesitas ejecutar el Rollback.

Normalmente vas a hacer algo del tipo de:

Try
BeginTransaction

If HayUnErrorAqui Then
Throw New Excepction("Hubo un error")
End If
CommitTransaction
Catch ex As Exception
RollbackTransaction
NotificarErrorAlUsuario(ex.Message)
End Try

si te fijas, la unica manera de llamar a Rollback es que no hayas llamado a
Commit, y si efectivamente llamas a Commit, nunca llamarás a Rollback.

Rollback y Commit deben estar en dos ramas de ejecución totalmente
diferentes y mutuamente excluyentes: tu problema no es de detectar si debes
o no hacer el Rollback en función de si se hizo o no el Commit (eso lo
resolverias colocando un flag booleano). La solución, sea cual fuere tu
código, es estructurarlo correctamente.


Salud!

Preguntas similares