Как обработать прерывание соединения со стороны сервера
От: Chebv  
Дата: 23.04.12 11:14
Оценка:
Добрый день.

В приложении используется ADO.NET и SQL2005. Для отлова ошибок используется конструкция try catch:

try {
...
sqlcommand.Execute();
} catch(Exception ex)
{
}


Собственно, бывают ситуации, когда сессию с длительно выполняющимся запросом админы убивают командой kill, либо перезапускают sql сервер. И это событие не вызывает исключения в клиентском приложении. В итоге на сервера происходит откат транзакции, а приложение обрабатывает, как будто все прошло нормально, что приводит к рассогласованию данных. Подскажите, каким образом в приложении обрабатывать эти ситуации? Как понять, что соединение разорвано?
Re: Как обработать прерывание соединения со стороны сервера
От: Степанов Андрей  
Дата: 23.04.12 17:24
Оценка:
Здравствуйте, Chebv, Вы писали:

C>Добрый день.


C>В приложении используется ADO.NET и SQL2005. Для отлова ошибок используется конструкция try catch:


C>try {

C> ...
C> sqlcommand.Execute();
C>} catch(Exception ex)
C>{
C>}


C>Собственно, бывают ситуации, когда сессию с длительно выполняющимся запросом админы убивают командой kill, либо перезапускают sql сервер. И это событие не вызывает исключения в клиентском приложении. В итоге на сервера происходит откат транзакции, а приложение обрабатывает, как будто все прошло нормально, что приводит к рассогласованию данных. Подскажите, каким образом в приложении обрабатывать эти ситуации? Как понять, что соединение разорвано?


Сколько лет работаю с ADO.NET, ни разу на такое не нарывался... Все, что приходит в голову, это обернуть Execute в свой метод, который после него будет делать какое-нибудь простое действие, требующее общения с сервером. Что-то типа ExecuteScalar от "SELECT 1". Результат запроса можно проверить на равенство единице с выбросом исключения, если равенство не выполнено. Хотя в первую очередь рекомендую переписать запросы так, чтобы не выполнялись слишком долго. А если это супер-мега-важная пакетная обработка всей базы, то надо админам по рукам дать, чтобы не отрубали ее
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.