Czy jest jakaś różnica między SqlCommand.CommandTimeout
i SqlConnection.ConnectionTimeout
w .NET?
Odpowiedzi:
Tak. CommandTimeout
to czas, który może zająć wykonanie pojedynczego polecenia. ConnectionTimeout
to jak długo może zająć nawiązanie połączenia z serwerem, aby rozpocząć.
Na przykład możesz wykonywać stosunkowo długo działające zapytania - wykonanie ich w ciągu 10 minut jest całkowicie w porządku, ale jeśli rozpoczęcie połączenia zajęło 10 minut, wiedziałbyś, że coś jest nie tak.
SqlCommand.CommandTimeout
= limit czasu dla zapytania SQL. Oznacza, ile czasu (np .: SELECT
, UPDATE
) zapytanie może zająć do jego wykonania. Jeśli przekroczy SqlCommand.CommandTimeout
, zatrzymuje wykonywanie. Wystąpi błąd przekroczenia limitu czasu polecenia.
SqlConnection.ConnectionTimeout
= limit czasu połączenia. Oznacza, ile czasu obiekt połączenia może próbować się połączyć. Jeśli przekroczy określony czas, przerywa łączenie. Wystąpi błąd przekroczenia limitu czasu połączenia.
ConnectionTimeout
określa czas oczekiwania przed przekroczeniem limitu czasu podczas próby otwarcia pliku SqlConnection
. Ma to znaczenie dla Connection.Open()
polecenia.
podczas
SqlCommand.CommandTimeout
określono czas trwania, przez który SqlCommand ma czekać przed przekroczeniem limitu czasu. Dzieje się tak po otwarciu połączenia i ExecuteXXX
wywołaniu jednej z metod w obiekcie Command.
Dodatkowe informacje
Wartość domyślna CommandTimeout
to 30 sekund. Zero (0) oznacza brak ograniczeń. Możesz ustawić CommandTimeout
wartość tylko w kodowaniu.
Wartość domyślna ConnectiontTimeout
to 15 sekund. Zero (0) również oznacza brak limitu. Otrzymana wartość mniejsza niż zero (wartość minus) ArgumentException
. Możesz ustawić ConnectionTimeout
wartość zarówno w pliku kodowania, jak i pliku konfiguracyjnego.
select @@LOCK_TIMEOUT //get the TIMEOUT,default is -1
set LOCK_TIMEOUT = 600//set TIMEOUT with ms
Krótka uwaga dotycząca CommandTimeout, ponieważ jest to właściwość obiektów Connection i Command ...
Ustawienie CommandTimeout w obiekcie Connection nie ma wpływu na ustawienie CommandTimeout w obiekcie Command w tym samym Connection; oznacza to, że właściwość CommandTimeout obiektu Command nie dziedziczy wartości wartości CommandTimeout obiektu Connection.
Dlatego ustawienie CommandTimeout w obiekcie Connection ma wpływ tylko na polecenia wykonywane w ramach obiektu Connection (bez używania obiektu Command).
np. kiedy łączysz się ze składowanym procesem i dodajesz parametry do obiektu polecenia i wykonujesz obiekt polecenia przy użyciu połączenia obiektu połączenia, musisz ustawić CommandTimeout w obiekcie Command i ConnectionTimeout w obiekcie Connection, aby zastąpić oba domyślne. Ustawienie CommandTimeout w obiekcie Connection nie spowoduje zastąpienia domyślnego limitu czasu dla poleceń obiektu polecenia.
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