C'è qualche differenza tra SqlCommand.CommandTimeout
e SqlConnection.ConnectionTimeout
in .NET?
Risposte:
Sì. CommandTimeout
è il tempo necessario per completare un singolo comando. ConnectionTimeout
è il tempo necessario per stabilire una connessione al server con cui iniziare.
Ad esempio, potresti eseguire query a esecuzione relativamente lunga: è perfettamente normale che impieghino 10 minuti per il completamento, ma se sono necessari 10 minuti per stabilire la connessione per iniziare, sapresti che qualcosa non va.
SqlCommand.CommandTimeout
= limite di timeout per la tua query SQL. Mezzi, quanto tempo un (es: SELECT
, UPDATE
) interrogazione possono prendere per la sua esecuzione. Se supera SqlCommand.CommandTimeout
, interrompe l'esecuzione. Si verificherà un errore di timeout del comando.
SqlConnection.ConnectionTimeout
= limite di timeout per la connessione. Significa quanto tempo il tuo oggetto di connessione può provare a connettersi. Se supera il tempo specificato, interrompe la connessione. Si verificherà un errore di timeout della connessione.
ConnectionTimeout
specifica la durata di attesa prima del timeout quando si tenta di aprire un file SqlConnection
. È rilevante per ilConnection.Open()
comando.
mentre
SqlCommand.CommandTimeout
ha specificato la durata di attesa di un SqlCommand prima del timeout. Ciò accade dopo che una connessione è stata aperta e uno dei ExecuteXXX
metodi è stato chiamato sull'oggetto Command.
Informazioni addizionali
Il valore predefinito di CommandTimeout
è 30 secondi. Zero (0) indica nessun limite. Puoi impostareCommandTimeout
valore solo in Codifica.
Il valore predefinito di ConnectiontTimeout
è 15 secondi. Zero (0) indica anche nessun limite. Otterrà un valore inferiore a zero (valore negativo) ArgumentException
. È possibile impostare il ConnectionTimeout
valore sia nel file Coding che nel file Config.
select @@LOCK_TIMEOUT //get the TIMEOUT,default is -1
set LOCK_TIMEOUT = 600//set TIMEOUT with ms
Nota rapida su CommandTimeout, poiché è una proprietà sia degli oggetti Connection che degli oggetti Command ...
L'impostazione CommandTimeout su un oggetto Connection non ha effetto sull'impostazione CommandTimeout su un oggetto Command sulla stessa connessione; in altre parole, la proprietà CommandTimeout dell'oggetto Command non eredita il valore del valore CommandTimeout dell'oggetto Connection.
Quindi l'impostazione CommandTimeout su un oggetto Connection influisce solo sui comandi eseguiti sotto l'oggetto Connection (senza utilizzare un oggetto Command).
Ad esempio, quando ti connetti a uno Stored Proc e aggiungi parametri all'oggetto comando, ed esegui l'oggetto Command utilizzando la connessione di un oggetto di connessione, dovrai impostare CommandTimeout sull'oggetto Command e ConnectionTimeout sull'oggetto Connection per sovrascrivere entrambi impostazioni predefinite. L'impostazione del CommandTimeout sull'oggetto di connessione non sovrascriverà il timeout predefinito per i comandi dell'oggetto di comando.
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