2009-06-19 10 views
5

Abbiamo alcuni elenchi di dati che vengono recuperati nella nostra applicazione tramite un SqlCommand che esegue una query SELECT su un database SQL Server. Non impostiamo esplicitamente una transazione su SqlCommand, invece di passarlo a SqlConnection ed eseguirlo. È il caso che quando non viene specificata alcuna transazione che SQL Server avvierà e utilizzerà una transazione predefinita con il valore predefinito IsolationLevel di ReadCommitted?Esecuzione di un SQLCommand senza specificare una transazione

risposta

3

SQL Server può funzionare tranquillamente senza una transazione esplicita. Ma sì, credo che sia essenzialmente un read-committed (a meno che, naturalmente, non aggiungiate ulteriori suggerimenti agli oggetti della query, come ad esempio UPDLOCK/NOLOCK). È possibile esaminare questo con:

DBCC USEROPTIONS 

che mostra (tra gli altri):

isolation level read committed 
5

SQL crea una transazione in modo implicito per le sue dichiarazioni, e questa transazione è commesso quando l'istruzione completa. Il livello di isolamento di questa transazione sarà il livello di isolamento corrente, che di default è READ COMMITTED. Alcune affermazioni sovrascrivono l'attuale livello di isolamento e impongono READ COMMITTED (ad esempio RECEIVE).

Se SqlCommand esegue un batch (più istruzioni), ciascuna istruzione che accede alle tabelle creerà la propria transazione.

Il valore predefinito autocommit of transactions è controllato modificando SET IMPLICIT_TRANSACTION ON.

Vedere Controlling Transactions per ulteriori dettagli.

+0

Forse ho lo stesso problema qui: http://stackoverflow.com/questions/41096727/is-there-an-implicit-transaction-in-sqlcommand-executenonquery – VansFannel

Problemi correlati