Transascciones

20/10/2005 - 09:22 por solusoft | Informe spam
Hola a todos,

una pregunta, creoq ue se puede especificar el tipo de bloqueo en las
transacciones de .NET, pero c uál es el valor por defecto ?.

Estaba utilizando transascciones, y me bloquea la tabla para lectura y no
puedo insertar más de un registro por tabla.
Ya que tengo que insertar varios registros en una tabla y al hacer la
consulta del código para el siguiente registro (select max() + 1), me genera
un error.

Si no se puede, tengo que pensar en otra forma de hacerlo.
Pero tiene que haber una manera, porque no puede ser que bloquee toda la
tabla en modo lectura también, a no ser que sea una aplicación que requiera
ese nivel tan alto de protección. En la mayoría de los casos, lo lógico es
que bloquee solamente los registros afectados por la transaccion para
cualquier modificación o inserción.

Saludos cordiales.

Preguntas similare

Leer las respuestas

#1 A.Poblacion
20/10/2005 - 09:33 | Informe spam
"solusoft" wrote in message
news:
Estaba utilizando transascciones, y me bloquea la tabla para lectura y no
puedo insertar más de un registro por tabla.
Ya que tengo que insertar varios registros en una tabla y al hacer la
consulta del código para el siguiente registro (select max() + 1), me


genera
un error.



Debería funcionar. Cuando insertas un registro en una transacción, se
bloqea de forma que no pueda ser leido desde otra conexión, pero la misma
que lo grabó sí que puede leerlo. ¿Te has asegurado de que la consulta que
hace el "select max() + 1" la estás ejecutando utilizando el mismo
SqlConnection, y que que estás aplicándole al SqlCommand el mismo
SqlTransaction que utilizaste en la grabación?
Respuesta Responder a este mensaje
#2 Octavio Hernandez
21/10/2005 - 02:16 | Informe spam
Hola,

El valor por defecto normalmente es ReadCommitted, como en el proveedor de
SQL Server:

http://www.syncfusion.com/library/c...ltopic.htm

¿Puedes aportar el fragmento de código para ver exactamente qué estás
tratando de hacer?

Slds - Octavio

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

una pregunta, creoq ue se puede especificar el tipo de bloqueo en las
transacciones de .NET, pero c uál es el valor por defecto ?.

Estaba utilizando transascciones, y me bloquea la tabla para lectura y no
puedo insertar más de un registro por tabla.
Ya que tengo que insertar varios registros en una tabla y al hacer la
consulta del código para el siguiente registro (select max() + 1), me
genera
un error.

Si no se puede, tengo que pensar en otra forma de hacerlo.
Pero tiene que haber una manera, porque no puede ser que bloquee toda la
tabla en modo lectura también, a no ser que sea una aplicación que
requiera
ese nivel tan alto de protección. En la mayoría de los casos, lo lógico es
que bloquee solamente los registros afectados por la transaccion para
cualquier modificación o inserción.

Saludos cordiales.





Respuesta Responder a este mensaje
#3 solusoft
21/10/2005 - 08:33 | Informe spam
Gracias, el problema era que se utilizaba otra conexión para obtener el
siguiente código (el select max() + 1) y claro, si había iniciado la
transacción con otra conexión, pues ahí estaban los problemas.


Por cierto, cómo puedo bloquear específicamente un registro de una tabla y
no la tabla completa ?

Saludos


"Octavio Hernandez" escribió:

Hola,

El valor por defecto normalmente es ReadCommitted, como en el proveedor de
SQL Server:

http://www.syncfusion.com/library/c...ltopic.htm

¿Puedes aportar el fragmento de código para ver exactamente qué estás
tratando de hacer?

Slds - Octavio

"solusoft" escribió en el mensaje
news:
> Hola a todos,
>
> una pregunta, creoq ue se puede especificar el tipo de bloqueo en las
> transacciones de .NET, pero c uál es el valor por defecto ?.
>
> Estaba utilizando transascciones, y me bloquea la tabla para lectura y no
> puedo insertar más de un registro por tabla.
> Ya que tengo que insertar varios registros en una tabla y al hacer la
> consulta del código para el siguiente registro (select max() + 1), me
> genera
> un error.
>
> Si no se puede, tengo que pensar en otra forma de hacerlo.
> Pero tiene que haber una manera, porque no puede ser que bloquee toda la
> tabla en modo lectura también, a no ser que sea una aplicación que
> requiera
> ese nivel tan alto de protección. En la mayoría de los casos, lo lógico es
> que bloquee solamente los registros afectados por la transaccion para
> cualquier modificación o inserción.
>
> Saludos cordiales.
>
>
>
>
>



Respuesta Responder a este mensaje
#4 Miguel Angel Campos
21/10/2005 - 09:23 | Informe spam
Debes utilizar la clausula WITH en las consultas, pero tienes que tener
mucho cuidado y analizar muy bien lo que quieres puesto que puedes provocar
consecuencias secundarias, tales como leer datos fantasmas, perjudicar el
plan de ejecución que SQL Server haría por si mismo, etc.
Ademas tienes que tener en cuenta que los bloqueos no solo se aplican sobre
la tabla o registros de la tabla, sino tambien sobre otros objetos como
índices, que pueden ser utilizados por otras consultas.

Un Saludo,

Miguel Angel Campos
MCAD.NET

"solusoft" escribió en el mensaje
news:
Gracias, el problema era que se utilizaba otra conexión para obtener el
siguiente código (el select max() + 1) y claro, si había iniciado la
transacción con otra conexión, pues ahí estaban los problemas.


Por cierto, cómo puedo bloquear específicamente un registro de una tabla y
no la tabla completa ?

Saludos


"Octavio Hernandez" escribió:

Hola,

El valor por defecto normalmente es ReadCommitted, como en el proveedor
de
SQL Server:


http://www.syncfusion.com/library/c...ltopic.htm

¿Puedes aportar el fragmento de código para ver exactamente qué estás
tratando de hacer?

Slds - Octavio

"solusoft" escribió en el mensaje
news:
> Hola a todos,
>
> una pregunta, creoq ue se puede especificar el tipo de bloqueo en las
> transacciones de .NET, pero c uál es el valor por defecto ?.
>
> Estaba utilizando transascciones, y me bloquea la tabla para lectura y
> no
> puedo insertar más de un registro por tabla.
> Ya que tengo que insertar varios registros en una tabla y al hacer la
> consulta del código para el siguiente registro (select max() + 1), me
> genera
> un error.
>
> Si no se puede, tengo que pensar en otra forma de hacerlo.
> Pero tiene que haber una manera, porque no puede ser que bloquee toda
> la
> tabla en modo lectura también, a no ser que sea una aplicación que
> requiera
> ese nivel tan alto de protección. En la mayoría de los casos, lo lógico
> es
> que bloquee solamente los registros afectados por la transaccion para
> cualquier modificación o inserción.
>
> Saludos cordiales.
>
>
>
>
>



Respuesta Responder a este mensaje
#5 Octavio Hernandez
21/10/2005 - 23:36 | Informe spam
Hola,

Por cierto, cómo puedo bloquear específicamente un registro de una tabla y
no la tabla completa ?



Me parece recordar que la cláusula HOLDLOCK de SQL Server permite lograr
eso:

http://msdn.microsoft.com/library/d...z_4ox9.asp

Pruébalo, no estoy seguro de eso...

Slds - Octavio

"solusoft" escribió en el mensaje
news:
Gracias, el problema era que se utilizaba otra conexión para obtener el
siguiente código (el select max() + 1) y claro, si había iniciado la
transacción con otra conexión, pues ahí estaban los problemas.


Por cierto, cómo puedo bloquear específicamente un registro de una tabla y
no la tabla completa ?

Saludos


"Octavio Hernandez" escribió:

Hola,

El valor por defecto normalmente es ReadCommitted, como en el proveedor
de
SQL Server:


http://www.syncfusion.com/library/c...ltopic.htm

¿Puedes aportar el fragmento de código para ver exactamente qué estás
tratando de hacer?

Slds - Octavio

"solusoft" escribió en el mensaje
news:
> Hola a todos,
>
> una pregunta, creoq ue se puede especificar el tipo de bloqueo en las
> transacciones de .NET, pero c uál es el valor por defecto ?.
>
> Estaba utilizando transascciones, y me bloquea la tabla para lectura y
> no
> puedo insertar más de un registro por tabla.
> Ya que tengo que insertar varios registros en una tabla y al hacer la
> consulta del código para el siguiente registro (select max() + 1), me
> genera
> un error.
>
> Si no se puede, tengo que pensar en otra forma de hacerlo.
> Pero tiene que haber una manera, porque no puede ser que bloquee toda
> la
> tabla en modo lectura también, a no ser que sea una aplicación que
> requiera
> ese nivel tan alto de protección. En la mayoría de los casos, lo lógico
> es
> que bloquee solamente los registros afectados por la transaccion para
> cualquier modificación o inserción.
>
> Saludos cordiales.
>
>
>
>
>



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida