Transacciones y bloqueos

01/09/2003 - 10:43 por Marc | Informe spam
Buenas,

Tengo un problemilla con el tema de Transacciones con ADO.NET, resulta que
tengo una serie de sentencias SQL q paso por parámetro a una función la cual
me crea una transacción para q se ejecuten estas sentencias en bloque. Por
ejemplo un delete y una serie de inserts.

Si realizo la llamada a esta función realmente no me da ningún tipo de
problema, pero si pongo un breakpoint situándolo en el ExecuteNonQuery al
añadirlas a la transacción, y tras el primer insert modifico la tabla de la
BD, entonces compruebo que me ha bloqueado la tabla. Cosa q no quiero q
ocurra.

En mi código inicializo una transacción de esta manera:

myTrans = oConn.BeginTransaction(IsolationLevel.ReadUncommitted);

Si alguien se hubiera peleado con el tema, me interesaría q me comunicara
como he de hacerlo para q no me bloquee los registros de la BD.

Gracias de antemano

Preguntas similare

Leer las respuestas

#1 Juan Carlos Vázquez Bohabén
01/09/2003 - 12:38 | Informe spam
No se si me equivoco, pero si pruebas a no realizar la transacción, te
pasaría lo mismo. Los bloqueos los puede realizar el Gestor de la DB cuando
detecta que se produce alguna modificación.
Podrías intentar abrir y cerrar una transacción cada vez que hagas una
modificación (si lo haces por bloques), una para el insert, otra para el
delete

A mi me pasó algo parecido al crear una tabla temporal, la cual quedaba
bloqueada y no podía hacer nada con ella. La solución fue (un poco drástica
a lo mejor) crear una nueva conexión y una nueva transacción, crear la
tabla, hacer commit y cerrar la conexión.

No se si te servirá de algo esto

"Marc" escribió en el mensaje
news:
Buenas,

Tengo un problemilla con el tema de Transacciones con ADO.NET, resulta que
tengo una serie de sentencias SQL q paso por parámetro a una función la


cual
me crea una transacción para q se ejecuten estas sentencias en bloque. Por
ejemplo un delete y una serie de inserts.

Si realizo la llamada a esta función realmente no me da ningún tipo de
problema, pero si pongo un breakpoint situándolo en el ExecuteNonQuery al
añadirlas a la transacción, y tras el primer insert modifico la tabla de


la
BD, entonces compruebo que me ha bloqueado la tabla. Cosa q no quiero q
ocurra.

En mi código inicializo una transacción de esta manera:

myTrans = oConn.BeginTransaction(IsolationLevel.ReadUncommitted);

Si alguien se hubiera peleado con el tema, me interesaría q me comunicara
como he de hacerlo para q no me bloquee los registros de la BD.

Gracias de antemano


Respuesta Responder a este mensaje
#2 Marc
01/09/2003 - 14:53 | Informe spam
Te agradezco el esfuerzo por contestar, aunque realmente me interesaría
realizar todo el conjunto de sentencias en bloque, ya q si no se realizara
una sentencia en particular deseo q la tabla se quede intacta.
Respuesta Responder a este mensaje
#3 Octavio Hernández
01/09/2003 - 19:06 | Informe spam
Marc,

¿Qué BD utilizas? La (gran) mayoría de los sistemas de bases de datos
actuales implementan las transacciones mediante bloqueos. Todo depende de
qué registros "tocan" las operaciones de tu transacción y de la eficiencia
de la implementación del SGBD que utilices. Por ejemplo, si una de las
operaciones de tu transacción es incrementarle el sueldo en un 5% a todos
los empleados de la empresa, después de que esa operación se ejecute y hasta
que termine la transacción la tabla de empleados completa estará bloqueada.
De esa manera, el SGBD garantiza que más nadie pueda modificar (y
posiblemente tampoco leer) esos registros hasta que la transacción que los
ha modificado se haya confirmado o retrocedido.

Por otra parte, no te recomiendo utilizar el nivel ReadUncommitted en ningún
caso. Con eso indicas al sistema que puede permitir a una transacción leer
datos que han sido modificados por otra transacción que aún no ha finalizado
y por tanto no se sabe si se confirmará o no. Utiliza al menos siempre
ReadCommitted.

Salu2 - Octavio

"Marc" escribió en el mensaje
news:
Te agradezco el esfuerzo por contestar, aunque realmente me interesaría
realizar todo el conjunto de sentencias en bloque, ya q si no se realizara
una sentencia en particular deseo q la tabla se quede intacta.


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