Gibt es einen Unterschied zwischen SqlCommand.CommandTimeoutund SqlConnection.ConnectionTimeoutin .NET?
Antworten:
Ja. CommandTimeoutist, wie lange ein einzelner Befehl dauern kann. ConnectionTimeoutGibt 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.
ConnectionTimeoutGibt 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.CommandTimeouthat die Dauer angegeben, die ein SqlCommand warten soll, bevor eine Zeitüberschreitung auftritt. Dies geschieht, nachdem eine Verbindung geöffnet und eine der ExecuteXXXMethoden für das Command-Objekt aufgerufen wurde.
Zusätzliche Information
Der Standardwert von CommandTimeoutist 30 Sekunden. Null (0) zeigt keine Begrenzung an. Sie können den CommandTimeoutWert nur in Codierung festlegen .
Der Standardwert von ConnectiontTimeoutist 15 Sekunden. Null (0) zeigt ebenfalls keine Begrenzung an. Ein Wert unter Null (Minuswert) wird erhalten ArgumentException. Sie können den ConnectionTimeoutWert 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