Czy jest jakaś różnica między SqlCommand.CommandTimeouti SqlConnection.ConnectionTimeoutw .NET?
Odpowiedzi:
Tak. CommandTimeoutto czas, który może zająć wykonanie pojedynczego polecenia. ConnectionTimeoutto 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.
ConnectionTimeoutokreśla czas oczekiwania przed przekroczeniem limitu czasu podczas próby otwarcia pliku SqlConnection. Ma to znaczenie dla Connection.Open()polecenia.
podczas
SqlCommand.CommandTimeoutokreślono czas trwania, przez który SqlCommand ma czekać przed przekroczeniem limitu czasu. Dzieje się tak po otwarciu połączenia i ExecuteXXXwywołaniu jednej z metod w obiekcie Command.
Dodatkowe informacje
Wartość domyślna CommandTimeoutto 30 sekund. Zero (0) oznacza brak ograniczeń. Możesz ustawić CommandTimeoutwartość tylko w kodowaniu.
Wartość domyślna ConnectiontTimeoutto 15 sekund. Zero (0) również oznacza brak limitu. Otrzymana wartość mniejsza niż zero (wartość minus) ArgumentException. Możesz ustawić ConnectionTimeoutwartość 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