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.
}
?
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
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 ));
}
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'.