Как работает ADO.NET SqlCommand.CommandTimeout? - PullRequest
2 голосов
/ 30 июля 2010

Рассмотрим хранимую процедуру, которая обновляет некоторые строки примерно за 60 секунд без использования транзакции.Мы устанавливаем ADO.NET SqlCommand.Timeout в 30 секунд.

SqlCommand.Timeout = 30;

Когда этот тайм-аут наступает через 30 секунд, будет ли хранимая процедура продолжать работать на сервере базы данных или нет?Как сервер сообщает об этом клиенту?

Ответы [ 3 ]

6 голосов
/ 02 августа 2010

Ответ - нет, ваши попытки выполнить действие на сервере завершатся неудачно через 30 секунд, ваш объект SqlCommand сгенерирует исключение в вашем коде (ниже), и неявная транзакция хранимой процедуры выполнит откат.

Тайм-аут истек.Период ожидания истек до завершения операции или сервер не отвечает.

... по крайней мере, это поведение, которое я могу проверить с помощью SQL Server ...

1 голос
/ 09 февраля 2015

Мне было интересно примерно то же самое. Я не смог найти ответ, но немного поэкспериментировал, и похоже, что отправляется какой-то запрос на отмену:

  • Если задействован триггер или таблица заблокирована, она не будет обновляться.
  • если в транзакции несколько операторов, а не в транзакции, они отменяются после истечения времени ожидания. То, что уже было сделано, остается выполненным.
  • Если вы добавите задержку перед вставкой, в вашей таблице ничего не будет.
  • если вы добавите задержку после вставки, вставка будет записана в вашу таблицу.

Я знаю, что это пятилетний пост, но если я попаду сюда, другие тоже будут: -)

Кстати, в ado.net, чтобы увеличить время ожидания, вы должны увеличить как команду sql, так и соединение sql, и значения по умолчанию для первого - 15 секунд, для второго 30 секунд. Так что, если вы просто измените команду sql на 60 секунд, она все равно будет остановлена ​​через 30 секунд, что может быть довольно загадочным.

0 голосов
/ 30 июля 2010

Если вы еще не закрыли свое SQL-соединение, оно должно продолжаться, если уже запущено выполнение proc. (Вы должны быть в состоянии проверить и проверить это относительно легко.)

...