Violazione chiave univoca in SQL Server – È sicuro assumere l’errore 2627?

Devo cogliere in modo particolare la violazione dei vincoli UNIQUE da parte di un’applicazione C # che sto sviluppando. È sicuro assumere che l’ Error 2627 corrisponderà sempre a una violazione di questo tipo, in modo che io possa usare

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

?

2627 è un vincolo univoco (include la chiave primaria), 2601 è un indice univoco

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

Ecco un pratico metodo di estensione che ho scritto per trovare questi:

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

All’interno di un’approssimazione, sì.

Se cerchi nel sito MS error and events per SQL Server, errore 2627, dovresti raggiungere questa pagina , il che indica che il messaggio riguarderà sempre una violazione della chiave duplicata (nota quali parti sono parametrizzate e quali no):

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