Если я создам TransactionScope, есть ли шанс, что он заблокирует базу данных, если я остановлю его во время отладки?

Я просто отлаживаю эту ошибку, которую я внезапно получил, когда пишу строку в таблицу.

Время ожидания истекло. Время ожидания истекло до завершения операции или сервер не отвечает. Заявление было прекращено.

Это как-то связано с областями транзакций? Мне было интересно, создаю ли я область транзакции и выполняю отладку, и буквально останавливаю приложение в середине отладки до того, как оно достигнет конца области транзакций - есть ли шанс, что оно заблокирует базу данных?

Если да, то как разблокировать?

ПРИМЕЧАНИЕ. Это может помочь, прямо сейчас у меня возникают проблемы с вставкой строки в таблицы, но у меня есть доступ и обновление существующих строк.

ОБНОВЛЕНИЕ. Я сбросил службу SQL Server, и, похоже, это помогло. Тем не менее, мне любопытно услышать, как это могло быть заблокировано в первую очередь - я не хочу, чтобы какая-то часть моего кода делала это и происходила в производстве.


person Diskdrive    schedule 10.03.2011    source источник


Ответы (1)


Если открытие транзакции БД заблокирует всю базу данных, это будет сильно разочаровывать. Вообще говоря, SQL Server блокирует каждую строку, а затем увеличивает эти блокировки по мере необходимости (здесь я значительно упрощаю ситуацию).

Каждая транзакция имеет тайм-аут, отведенный ей для завершения. Если это время истечет, и вы не зафиксируете и не откатитесь, вы получите исключение «Время ожидания истекло».

Что касается «разблокировки», обычно вам не о чем беспокоиться. Все разблокируется, как только вы закроете соединение.

person Anton Gogolev    schedule 10.03.2011
comment
но если я остановлю приложение до того, как оно завершится с транзакцией, будет ли оно автоматически закрывать соединение? - person Diskdrive; 11.03.2011