Come posso sapere se è stata generata una SQLException a causa di una violazione di chiave esterna?

Voglio dire all’utente che un record non è stato cancellato perché ha dati secondari, ma come posso essere sicuro che l’eccezione sia stata lanciata a causa di una violazione di chiave esterna? Vedo che esiste una class sqlexception che viene utilizzata per tutte le eccezioni sql.

Supponiamo che tu stia utilizzando SQL Server.

Usando Googles – http://blogs.msdn.com/tomholl/archive/2007/08/01/mapping-sql-server-errors-to-net-exceptions-the-fun-way.aspx

try { # SQL Stuff } catch (SqlException ex) { if (ex.Errors.Count > 0) // Assume the interesting stuff is in the first error { switch (ex.Errors[0].Number) { case 547: // Foreign Key violation throw new InvalidOperationException("Some helpful description", ex); break; case 2601: // Primary key violation throw new DuplicateRecordException("Some other helpful description", ex); break; default: throw new DataAccessException(ex); } } } 

Il caso 547 è il tuo uomo.

AGGIORNARE Quanto sopra è un codice di esempio e non dovrebbe essere usato. Si prega di seguire il link per spiegare perché.

Puoi scrivere il codice previsto dall’eccezione nel blocco Try se verrà lanciata un’eccezione sarà catturata più lontano ora puoi ottenere il numero dell’errore.ora può controllare se è una violazione di chiave esterna o no

 try { //your deletetion code }catch (SqlException ex) { if (ex.Errors.Count > 0) // Assume the interesting stuff is in the first error { switch (ex.Errors[0].Number) { case 547: // Foreign Key violation lblError.Text = "Cannot Delete this Record this is associated with other record...!"; break; default: throw; } } }