Чи існує якась різниця між 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
значення як у кодуванні, так і у файлі конфігурації.
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).
наприклад, коли ви підключаєтеся до збереженого Proc і додаєте параметри до об'єкта команди та виконуєте об'єкт Command за допомогою з'єднання об'єкта підключення, тоді вам потрібно буде встановити CommandTimeout для об'єкта Command та ConnectionTimeout для об'єкта Connection, щоб замінити обидва за замовчуванням. Встановлення CommandTimeout на об'єкті підключення не замінить час очікування за замовчуванням для команд командного об'єкта.
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 / reference / ado-api / connectiontimeout-property-ado? view = sql-server-ver15