Gibt es einen Unterschied zwischen SqlCommand.CommandTimeout
und SqlConnection.ConnectionTimeout
in .NET?
Antworten:
Ja. CommandTimeout
ist, wie lange ein einzelner Befehl dauern kann. ConnectionTimeout
Gibt an, wie lange es dauern kann, bis eine Verbindung zum Server hergestellt ist.
Beispielsweise führen Sie möglicherweise Abfragen mit relativ langer Laufzeit aus. Es ist vollkommen in Ordnung, dass der Vorgang 10 Minuten dauert. Wenn Sie jedoch zunächst 10 Minuten benötigen, um die Verbindung herzustellen, wissen Sie, dass ein Fehler vorliegt.
SqlCommand.CommandTimeout = Zeitlimit für Ihre SQL-Abfrage. Bedeutet, wie viel Zeit eine Abfrage (z. B. SELECT, UPDATE) für ihre Ausführung benötigen kann. Wenn es SqlCommand.CommandTimeout überschreitet, stoppt es die Ausführung. Ein Befehlszeitlimitfehler tritt auf.
SqlConnection.ConnectionTimeout = Zeitlimit für Ihre Verbindung. Bedeutet, wie viel Zeit Ihr Verbindungsobjekt versuchen kann, eine Verbindung herzustellen. Wenn die angegebene Zeit überschritten wird, wird die Verbindung unterbrochen. Ein Verbindungs-Timeout-Fehler tritt auf.
ConnectionTimeout
Gibt die Wartezeit an, bevor beim Versuch, eine zu öffnen, eine Zeitüberschreitung auftrittSqlConnection
. Es ist relevant für den Connection.Open()
Befehl.
während
SqlCommand.CommandTimeout
hat die Dauer angegeben, die ein SqlCommand warten soll, bevor eine Zeitüberschreitung auftritt. Dies geschieht, nachdem eine Verbindung geöffnet und eine der ExecuteXXX
Methoden für das Command-Objekt aufgerufen wurde.
Zusätzliche Information
Der Standardwert von CommandTimeout
ist 30 Sekunden. Null (0) zeigt keine Begrenzung an. Sie können den CommandTimeout
Wert nur in Codierung festlegen .
Der Standardwert von ConnectiontTimeout
ist 15 Sekunden. Null (0) zeigt ebenfalls keine Begrenzung an. Ein Wert unter Null (Minuswert) wird erhalten ArgumentException
. Sie können den ConnectionTimeout
Wert sowohl in der Codierungs- als auch in der Konfigurationsdatei festlegen .
select @@LOCK_TIMEOUT //get the TIMEOUT,default is -1
set LOCK_TIMEOUT = 600//set TIMEOUT with ms
Kurzer Hinweis zu CommandTimeout, da es eine Eigenschaft von Connection- und Command-Objekten ist ...
Die CommandTimeout-Einstellung für ein Verbindungsobjekt hat keine Auswirkungen auf die CommandTimeout-Einstellung für ein Command-Objekt für dieselbe Verbindung. Das heißt, die CommandTimeout-Eigenschaft des Command-Objekts erbt nicht den Wert des CommandTimeout-Werts des Verbindungsobjekts.
Die CommandTimeout-Einstellung für ein Verbindungsobjekt wirkt sich also nur auf Befehle aus, die nur unter dem Verbindungsobjekt ausgeführt werden (ohne Verwendung eines Befehlsobjekts).
Wenn Sie beispielsweise eine Verbindung zu einem gespeicherten Prozess herstellen und dem Befehlsobjekt Parameter hinzufügen und das Befehlsobjekt über die Verbindung eines Verbindungsobjekts ausführen, müssen Sie CommandTimeout für das Command-Objekt und ConnectionTimeout für das Connection-Objekt festlegen, um beide zu überschreiben Standardeinstellungen. Durch Festlegen des CommandTimeout für das Verbindungsobjekt wird das Standardzeitlimit für die Command Object-Befehle nicht überschrieben.
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 / verbindungszeitüberschreitung-eigenschaft-ado? view = sql-server-ver15