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'.