Violation de clé unique dans SQL Server – Est-il sûr d’assumer l’erreur 2627?

Je dois attraper la violation des contraintes UNIQUE d’une manière spéciale par une application C # que je développe. Est-il prudent de supposer que l’ Error 2627 correspondra toujours à une violation de ce type, de sorte que je puisse utiliser

 if (ThisSqlException.Number == 2627) { // Handle unique constraint violation. } else { // Handle the remaing errors. } 

?

2627 est la contrainte unique (inclut la clé primaire), 2601 est l’index unique

 SELECT * FROM sys.messages WHERE text like '%duplicate%' and text like '%key%' and language_id = 1033 

Voici une méthode d’extension pratique que j’ai écrite pour les trouver:

  public static bool IsUniqueKeyViolation(this SqlException ex) { return ex.Errors.Cast().Any(e => e.Class == 14 && (e.Number == 2601 || e.Number == 2627 )); } 

En une approximation, oui.

Si vous effectuez une recherche dans le site d’erreur et d’événements MS pour SQL Server, erreur 2627, vous devriez atteindre cette page , ce qui indique que le message concernera toujours une violation de clé dupliquée (notez les parties paramétrées et non):

 Violation of %ls constraint '%.*ls'. Cannot insert duplicate key in object '%.*ls'.