Что делает MSSQL, когда соединение теряется, после вызова SP? - PullRequest
1 голос
/ 16 апреля 2019

У меня есть программное обеспечение, работающее через WLAN, установленное на движущемся устройстве. На данный момент транзакции открываются и закрываются в коде. Между businesslogic происходит. Теперь я страдаю от потери соединения и оставаю открытыми транзакции в базе данных. (MSSQL 2012)

Мое решение состояло в том, чтобы переместить все транзакции / логику в sp.

Таким образом, клиент только вызывает sp и транзакции обрабатываются внутри.

Мой вопрос здесь: Что происходит с пользователем, когда соединение теряется? Это бежит до конца?

1 Ответ

1 голос
/ 16 апреля 2019

Это описано в документации Управление транзакциями (компонент Database Engine) , в частности, в разделе Ошибки при обработке транзакции :

Если ошибка предотвращаетПри успешном завершении транзакции SQL Server автоматически откатывает транзакцию и освобождает все ресурсы, удерживаемые транзакцией. Если сетевое соединение клиента с экземпляром компонента Database Engine прервано, все незавершенные транзакции для соединения будут откатываться, когда сеть уведомит экземпляр об ошибке. Если клиентское приложение завершится неудачно или если клиентский компьютервыходит из строя или перезапускается, это также разрывает соединение, и экземпляр компонента Database Engine откатывает все незавершенные соединения, когда сеть уведомляет его о разрыве.Если клиент выходит из приложения, все ожидающие транзакции откатываются.

Я выделил соответствующий раздел.

Итак, перемещение транзакций в SP не остановитсяоткат транзакции, если ваше соединение обрывается.Я бы предложил выяснить, почему ваше соединение нестабильно, и исправить это.В противном случае вам нужно будет найти способ выполнить запрос локально для экземпляра (возможно, с помощью агента SQL).

...