Problema extraño con transacciones

13/06/2006 - 13:54 por solusoft | Informe spam
Hola,

llevaba varias semanas tras un error, inexplicable para mi, relacionado con
transacciones.

El caso es que tenía una aplicación Windows Forms .NET en C# y SQL SERVER
2000 . En un formulario inicio una transacción, realizo una serie de select e
inserts -que son indiferentes para aceptar o cancelar la transacción-, y
acepto transacción.

La cuestión es que si falla por ejemplo un insert dentro de la transacción,
al hacer el commit, me da un error:

La petición COMMIT TRANSACTION no tiene la correspondiente BEGIN TRANSACTION
The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION

En el analizador de consultas hago:

begin tran

select * from CORC_TEMP_COMPROMISOS where it_accion = 'M'
select @@trancount

select * from CORC_TEMP_COMPROMISOS where it_accion = 'A'
select @@trancount

Insert into CORC_COMPROMISOS (cd_linea_financiera, cd_asociacion,
cd_accion, nm_grupos, nm_participantes)
values ( '5','0001',33,33,33) -- falla por triggers , es indiferente para el
commit/rollbak de la transacción
select @@trancount -- aqui vale 0 !!!!!!!!!! DEBERIA VALER 1 !!!!!

commit tran


El caso es que al fallar cualquier consulta (select, insert...) dentro de la
transacción, justo después el trancount me vale 0, y debería valer 1.

Alguién sabe cómo pu edo solucionarlo ? Es posbile que sea configuración de
SQL SERVER ??

Saludos cordiales y gracias anticipadas.
 

Leer las respuestas

#1 Vyacheslav Popov
13/06/2006 - 14:30 | Informe spam
Hola,

Sospecho que esto debe a lo siguiente: cuando se produce el error en la
instrucción INSERT se ejecuta automáticamente la instrucción ROLLBACK si
después le pides hacer COMMIT no encuentra ninguna entrada en la cola de
transacciones.

La solución es, comprobar si se ha producido algún error con algo así (if
@@error = 0) no estoy seguro... entonces ejecutar COMMIT.

Saludos.

"solusoft" escribió en el mensaje
news:
Hola,

llevaba varias semanas tras un error, inexplicable para mi, relacionado
con
transacciones.

El caso es que tenía una aplicación Windows Forms .NET en C# y SQL SERVER
2000 . En un formulario inicio una transacción, realizo una serie de
select e
inserts -que son indiferentes para aceptar o cancelar la transacción-, y
acepto transacción.

La cuestión es que si falla por ejemplo un insert dentro de la
transacción,
al hacer el commit, me da un error:

La petición COMMIT TRANSACTION no tiene la correspondiente BEGIN
TRANSACTION
The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION

En el analizador de consultas hago:

begin tran

select * from CORC_TEMP_COMPROMISOS where it_accion = 'M'
select @@trancount

select * from CORC_TEMP_COMPROMISOS where it_accion = 'A'
select @@trancount

Insert into CORC_COMPROMISOS (cd_linea_financiera, cd_asociacion,
cd_accion, nm_grupos, nm_participantes)
values ( '5','0001',33,33,33) -- falla por triggers , es indiferente para
el
commit/rollbak de la transacción
select @@trancount -- aqui vale 0 !!!!!!!!!! DEBERIA VALER 1 !!!!!

commit tran


El caso es que al fallar cualquier consulta (select, insert...) dentro de
la
transacción, justo después el trancount me vale 0, y debería valer 1.

Alguién sabe cómo pu edo solucionarlo ? Es posbile que sea configuración
de
SQL SERVER ??

Saludos cordiales y gracias anticipadas.




Preguntas similares