Время ожидания SQL Server в С# после настройки времени ожидания

У меня есть приложение формы Windows, написанное на С#, которое передает запрос в базу данных SQL Server, а затем отображает результаты в сетке просмотра данных. Запрос, передаваемый в базу данных, зависит от параметра, выбранного в форме.

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

  1. В программу добавлен 5-минутный тайм-аут, установив для параметра тайм-аута соединения значение 300 секунд в строке подключения sql. Пример: Data Source=ab;Initial Catalog=abc;User ID=user; Password =pw; Connection Timeout=300

  2. Установка времени ожидания удаленного запроса в экземпляре SQL Server равным 0 (что означает отсутствие времени ожидания). Пример: EXEC sp_configure 'remote query timeout', 0 ; GO

Ни один из этих вариантов не работает. Несмотря на реализацию обоих из них, программа С# возвращает ошибку тайм-аута sql менее чем через минуту.

Есть ли обходной путь для этого? Я искал эту тему по переполнению стека, и до сих пор все предложения сводились к тому, чтобы сделать либо 1, либо 2 (что я и сделал).

Для справки: я использую выпуск Visual Studio 17 Community и выпуск SQL Server 2016 Developer.

Любая помощь будет принята с благодарностью.

Спасибо!


person Bad Programmer    schedule 02.10.2017    source источник


Ответы (3)


Тайм-аут подключения и тайм-аут команды — это две разные вещи.

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

Тайм-аут команды возникает, когда соединение установлено, но выполняемый для него запрос не возвращает результатов в течение отведенного времени ожидания команды. Время ожидания команды по умолчанию в ADO.NET составляет 30 секунд.

Если вы установили тайм-аут соединения на 300 секунд, а тайм-аут по-прежнему возникает, скорее всего, это тайм-аут команды. Как сказал walkers01, установите время ожидания команды на подходящее количество секунд. 300 секунд должно быть более чем достаточно; если ваш запрос выполняется в SSMS за одну минуту, должно хватить тайм-аута в 90 секунд.

person Mike Hofer    schedule 02.10.2017

В команде SQL есть свойство CommandTimeout. Попробуйте установить это.

person wakers01    schedule 02.10.2017

Попробуйте это для неограниченного времени выполнения запроса, если вы используете SqlDataAdapter. Я использовал этот, решил мою проблему.

 SqlDataAdapter dscmd = new SqlDataAdapter(sql, cnn);
                    dscmd.SelectCommand.CommandTimeout = 0;
person Er. Binod Mehta    schedule 19.06.2020