Выполнение SQLCommand без указания транзакции - PullRequest
5 голосов
/ 19 июня 2009

У нас есть несколько списков данных, извлекаемых в нашем приложении через SqlCommand, выполняющий запрос SELECT к базе данных SQL Server. Мы не устанавливаем явно транзакцию в SqlCommand, а просто передаем ей SqlConnection и запускаем ее. Может ли случиться так, что, если не указана транзакция, SQL Server будет инициировать и использовать транзакцию по умолчанию с IsolationLevel по умолчанию ReadCommitted?

Ответы [ 2 ]

6 голосов
/ 19 июня 2009

SQL создает транзакцию неявно для ваших операторов, и эта транзакция фиксируется после завершения оператора. Уровень изоляции этой транзакции будет текущим уровнем изоляции, который по умолчанию равен READ COMMITTED. Некоторые операторы перезаписывают текущий уровень изоляции и применяют READ COMMITTED (например, RECEIVE).

Если ваша SqlCommand выполняет пакет (больше операторов), то каждый оператор, который обращается к таблицам, будет создавать свою собственную транзакцию.

Автоматическая фиксация транзакций по умолчанию управляется изменением SET IMPLICIT_TRANSACTION ON.

Подробнее см. Управление транзакциями .

3 голосов
/ 19 июня 2009

SQL Server может работать без явной транзакции. Но да, я считаю, что это, по сути, фиксация для чтения (если, конечно, вы не добавите дополнительные подсказки к объектам запроса, например UPDLOCK / NOLOCK). Вы можете исследовать это с помощью:

DBCC USEROPTIONS

, который показывает (среди прочих):

isolation level read committed
...