web-dev-qa-db-fra.com

Violation de clé unique dans SQL Server - Est-il sûr de supposer l'erreur 2627?

J'ai besoin de détecter une violation des contraintes UNIQUE d'une manière spéciale par une application C # que je développe. Est-il sûr de supposer que Error 2627 correspondra toujours à une violation de ce type, afin que je puisse utiliser

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

?

67
User

2627 est une contrainte unique (inclut la clé primaire), 2601 est un index unique

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

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<SqlError>().Any(e => e.Class == 14 && (e.Number == 2601 || e.Number == 2627 ));
    }
14
jhilden

Dans une approximation, oui.

Si vous recherchez le site d'erreurs et d'événements MS pour SQL Server, erreur 2627, vous devriez, espérons-le, atteindre cette page , ce qui indique que le message concernera toujours une violation de clé en double (notez quelles parties sont paramétrées et non):

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