Error Transacciones

14/06/2006 - 11:36 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.

Preguntas similare

Leer las respuestas

#1 Maxi
14/06/2006 - 14:51 | Informe spam
Hola, si esto lo estas manejando todo desde la aplicacion y no desde un SP
deberias revisar bien como esta trabajando c#, ahi tienes el problema
realmente.

Es mas para probar podrias copiar todo ese codigo en un SP o en tu query
analizer y si funciona el problema no es de SQLServer


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"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.

Respuesta Responder a este mensaje
#2 solusoft
14/06/2006 - 15:51 | Informe spam
Este script lo ejecuto en el Analizador de Consultas, directamente en sql
server.

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




No sé cuál será la causa.

"Maxi" escribió:

Hola, si esto lo estas manejando todo desde la aplicacion y no desde un SP
deberias revisar bien como esta trabajando c#, ahi tienes el problema
realmente.

Es mas para probar podrias copiar todo ese codigo en un SP o en tu query
analizer y si funciona el problema no es de SQLServer


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"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.
>



Respuesta Responder a este mensaje
#3 Alejandro Mesa
14/06/2006 - 16:16 | Informe spam
solusoft,

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 !!!!!



cuando dices falla por triggers, a que te refieres?

Si el trigger falla, puede que estes haciendo un rollback de la transaccion
dentro dell trigger o SQL Server esta haciendo el rollback dentro del trigger
debido a algun posible error. Debes chequear si hubo error y tambien el nivel
de anidamiento de la transaccion.

El codigo seria algo asi como:

declare @error int
declare @tc int

begin tran

set @tc = @@trancount

select * from CORC_TEMP_COMPROMISOS where it_accion = 'M'
select * from CORC_TEMP_COMPROMISOS where it_accion = 'A'

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

set @error = @@error

if @error != 0
begin
if @@trancount > 0 rollback transaction
goto end_script
end

commit tran

:end_script
go

Implementing Error Handling with Stored Procedures
http://www.sommarskog.se/error-handling-II.html

Error Handling in SQL Server – a Background
http://www.sommarskog.se/error-handling-I.html


AMB

"solusoft" wrote:

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.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida