2009-06-19 10 views
5

Tenemos algunas listas de datos que se obtienen en nuestra aplicación a través de un SqlCommand realizando una consulta SELECT en una base de datos de SQL Server. No configuramos explícitamente una transacción en el SqlCommand, sino que le pasamos un SqlConnection y lo ejecutamos. ¿Es el caso que cuando no se especifica ninguna transacción, SQL Server iniciará y usará una transacción predeterminada con IsolationLevel por defecto de ReadCommitted?Ejecutando un SQLCommand sin especificar una transacción

Respuesta

3

SQL Server puede funcionar felizmente sin una transacción explícita. Pero sí, creo que es esencialmente de lectura confirmada (a menos que, por supuesto, agregue pistas adicionales a sus objetos de consulta, como UPDLOCK/NOLOCK). Se pueden investigar esto con:

DBCC USEROPTIONS 

que muestra (entre otros):

isolation level read committed 
5

SQL crea una transacción implícita de sus estados de cuenta, y esta operación se comete cuando la declaración completa. El nivel de aislamiento de esta transacción será el nivel de aislamiento actual, que se establece de forma predeterminada en LEÍDO COMPROMETIDO. Ciertas declaraciones sobrescriben el nivel de aislamiento actual y hacen cumplir LEER COMPROMETIDO (por ejemplo, RECIBIR).

Si su SqlCommand ejecuta un lote (más declaraciones), cada instrucción que acceda a las tablas creará su propia transacción.

El valor predeterminado autocommit of transactions se controla al cambiar SET IMPLICIT_TRANSACTION ON.

Consulte Controlling Transactions para obtener más información.

+0

Quizás tenga el mismo problema aquí: http://stackoverflow.com/questions/41096727/is-there-an-implicit-transaction-in-sqlcommand-executenonquery – VansFannel

Cuestiones relacionadas