J'ai besoin d'attraper spécifiquement les exceptions de délai d'expiration du serveur SQL afin qu'elles puissent être traitées différemment. Je sais que je pourrais attraper le SqlException et puis vérifier si la chaîne de message contient "Timeout" mais je me demandais s'il y avait une meilleure façon de le faire?
try
{
//some code
}
catch (SqlException ex)
{
if (ex.Message.Contains("Timeout"))
{
//handle timeout
}
else
{
throw;
}
}
c#
.net
sql-server
error-handling
brodie
la source
la source
Réponses:
Pour vérifier un délai d'attente, je crois que vous vérifiez la valeur de ex.Number. Si c'est -2, alors vous avez une situation de timeout.
-2 est le code d'erreur pour le délai d'expiration, renvoyé par DBNETLIB, le pilote MDAC pour SQL Server. Cela peut être vu en téléchargeant Reflector et en recherchant sous System.Data.SqlClient.TdsEnums pour TIMEOUT_EXPIRED.
Votre code lirait:
Code pour démontrer l'échec:
la source
ici: http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework.adonet/2006-10/msg00064.html
Vous pouvez également lire que Thomas Weingartner a écrit:
...
la source
Mis à jour pour c # 6:
Très simple et agréable à regarder !!
la source
Quelle est la valeur de la propriété SqlException.ErrorCode? Pouvez-vous travailler avec ça?
En cas d' expiration de délai, il peut être utile de vérifier le code -2146232060 .
Je définirais cela comme un const statique dans votre code de données.
la source
Je ne suis pas sûr mais lorsque nous avons expiré le délai d'exécution ou le délai de commande Le client envoie un "ABORT" à SQL Server puis abandonne simplement le traitement de la requête. Aucune transaction n'est annulée, aucun verrou n'est libéré. pour résoudre ce problème, je supprime la transaction dans la procédure stockée et utilise la transaction SQL dans mon code .Net Pour gérer sqlException
la source
Lorsqu'un client envoie ABORT, aucune transaction n'est annulée. Pour éviter ce comportement, nous devons utiliser SET_XACT_ABORT ON https://docs.microsoft.com/en-us/sql/t-sql/statements/set-xact-abort-transact-sql?view=sql-server-ver15
la source