Есть ли разница между SqlCommand.CommandTimeout
и SqlConnection.ConnectionTimeout
в .NET?
Ответы:
Да. CommandTimeout
сколько времени может занять выполнение одной команды. ConnectionTimeout
сколько времени может потребоваться для установления соединения с сервером для начала.
Например, вы можете выполнять относительно долго выполняющиеся запросы - для них вполне нормально, что на их выполнение требуется 10 минут, но если для начала соединения потребовалось 10 минут, вы бы знали, что что-то сильно не так.
SqlCommand.CommandTimeout
= предел времени ожидания для вашего SQL-запроса. Означает, сколько времени (например SELECT
, UPDATE
) запрос может занять для его выполнения. Если он превышает SqlCommand.CommandTimeout
, то выполнение останавливается. Произойдет ошибка тайм-аута команды.
SqlConnection.ConnectionTimeout
= предел времени ожидания для вашего соединения. Означает, сколько времени ваш объект подключения может пытаться подключиться. Если он превышает указанное время, он прекращает подключение. Произойдет ошибка тайм-аута подключения.
ConnectionTimeout
определяет продолжительность ожидания до истечения времени ожидания при попытке открытьSqlConnection
. Это относится к Connection.Open()
команде.
пока
SqlCommand.CommandTimeout
указал продолжительность ожидания SqlCommand до истечения времени ожидания. Это происходит после того, как соединение было открыто и один из ExecuteXXX
методов был вызван для объекта Command.
Дополнительная информация
Значение по умолчанию CommandTimeout
- 30 секунд. Ноль (0) означает отсутствие ограничения. Вы можете установить CommandTimeout
значение только в кодировании.
Значение по умолчанию ConnectiontTimeout
- 15 секунд. Ноль (0) также означает отсутствие ограничения. Получится значение меньше нуля (минус значение) ArgumentException
. Вы можете установить ConnectionTimeout
значение как в файле Coding, так и в файле конфигурации.
select @@LOCK_TIMEOUT //get the TIMEOUT,default is -1
set LOCK_TIMEOUT = 600//set TIMEOUT with ms
Небольшое примечание относительно CommandTimeout, поскольку это свойство как объектов Connection, так и Command ...
Параметр CommandTimeout для объекта Connection не влияет на параметр CommandTimeout для объекта Command в том же Connection; то есть свойство CommandTimeout объекта Command не наследует значение значения CommandTimeout объекта Connection.
Таким образом, параметр CommandTimeout в объекте Connection влияет только на команды, выполняемые только под объектом Connection (без использования объекта Command).
например, когда вы подключаетесь к хранимой процедуре и добавляете параметры к объекту команды и выполняете объект Command с использованием соединения объекта подключения, тогда вам нужно будет установить CommandTimeout для объекта Command и ConnectionTimeout для объекта Connection, чтобы переопределить оба по умолчанию. Установка CommandTimeout для объекта подключения не отменяет тайм-аут по умолчанию для команд объекта Command.
https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/commandtimeout-property-ado?view=sql-server-ver15 https://docs.microsoft.com/en-us / sql / ado / справочник / ado-api / connectiontimeout-property-ado? view = sql-server-ver15