Y a-t-il une différence entre SqlCommand.CommandTimeout
et SqlConnection.ConnectionTimeout
dans .NET?
Réponses:
Oui. CommandTimeout
est le temps qu'une seule commande peut prendre pour se terminer. ConnectionTimeout
est le temps nécessaire pour établir une connexion au serveur au départ.
Par exemple, vous exécutez peut-être des requêtes relativement longues - il est parfaitement normal qu'elles prennent 10 minutes, mais si cela prenait 10 minutes pour démarrer la connexion, vous sauriez que quelque chose n'allait vraiment pas.
SqlCommand.CommandTimeout
= délai d'expiration de votre requête SQL. Les moyens, combien de temps un (par exemple: SELECT
, UPDATE
) une requête peut prendre pour son exécution. S'il dépasse SqlCommand.CommandTimeout
, alors il arrête l'exécution. Une erreur de temporisation de commande se produira.
SqlConnection.ConnectionTimeout
= délai d'expiration de votre connexion. Cela signifie combien de temps votre objet de connexion peut essayer de se connecter. S'il dépasse la durée spécifiée, la connexion s'arrête. Une erreur de temporisation de connexion se produira.
ConnectionTimeout
spécifie la durée d'attente avant l'expiration du délai lors de la tentative d' ouverture d' un fichierSqlConnection
. Il est pertinent pour la Connection.Open()
commande.
tandis que
SqlCommand.CommandTimeout
spécifié la durée pendant laquelle un SqlCommand doit attendre avant l'expiration du délai. Cela se produit une fois qu'une connexion a été ouverte et qu'une des ExecuteXXX
méthodes a été appelée sur l'objet Command.
Information additionnelle
La valeur par défaut CommandTimeout
est de 30 secondes. Zéro (0) indique aucune limite. Vous ne pouvez définir la CommandTimeout
valeur que dans le codage.
La valeur par défaut ConnectiontTimeout
est de 15 secondes. Zéro (0) indique également aucune limite. Une valeur inférieure à zéro (valeur moins) sera obtenue ArgumentException
. Vous pouvez définir la ConnectionTimeout
valeur dans les fichiers de codage et de configuration.
select @@LOCK_TIMEOUT //get the TIMEOUT,default is -1
set LOCK_TIMEOUT = 600//set TIMEOUT with ms
Note rapide concernant CommandTimeout, car il s'agit d'une propriété des objets Connection et Command ...
Le paramètre CommandTimeout sur un objet Connection n'a aucun effet sur le paramètre CommandTimeout sur un objet Command sur la même connexion; autrement dit, la propriété CommandTimeout de l'objet Command n'hérite pas de la valeur de la valeur CommandTimeout de l'objet Connection.
Ainsi, le paramètre CommandTimeout sur un objet Connection affecte uniquement les commandes exécutées sous l'objet Connection uniquement (sans utiliser d'objet Command).
Par exemple, lorsque vous vous connectez à un processus stocké et que vous ajoutez des paramètres à l'objet de commande et que vous exécutez l'objet de commande à l'aide de la connexion d'un objet de connexion, vous devez définir CommandTimeout sur l'objet Command et ConnectionTimeout sur l'objet Connection pour remplacer les deux les valeurs par défaut. La définition de CommandTimeout sur l'objet de connexion ne remplacera pas le délai par défaut pour les commandes d'objet de commande.
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