Czy jest jakaś różnica między SqlCommand.CommandTimeout
i SqlConnection.ConnectionTimeout
w .NET?
.net
sqlconnection
sqlcommand
Dhanapal
źródło
źródło
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.
źródło
SqlCommand.CommandTimeout
= limit czasu dla zapytania SQL. Oznacza, ile czasu (np .:SELECT
,UPDATE
) zapytanie może zająć do jego wykonania. Jeśli przekroczySqlCommand.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.źródło
ConnectionTimeout
określa czas oczekiwania przed przekroczeniem limitu czasu podczas próby otwarcia plikuSqlConnection
. Ma to znaczenie dlaConnection.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 iExecuteXXX
wywołaniu jednej z metod w obiekcie Command.źródło
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.źródło
select @@LOCK_TIMEOUT //get the TIMEOUT,default is -1 set LOCK_TIMEOUT = 600//set TIMEOUT with ms
źródło
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
źródło