Desidero comunicare all'utente che un record non è stato eliminato perché contiene dati secondari, ma come posso essere sicuro che l'eccezione sia stata generata a causa di una violazione di chiave esterna? Vedo che esiste una classe sqlexception che viene utilizzata per tutte le eccezioni sql.Come posso sapere se è stata generata una SQLException a causa di una violazione di chiave esterna?
Q
Come posso sapere se è stata generata una SQLException a causa di una violazione di chiave esterna?
17
A
risposta
39
assume che si sta utilizzando SQL Server.
Utilizzando teh 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);
}
}
}
caso 547 è il vostro uomo.
UPDATE Quanto sopra è un codice di esempio e non deve essere utilizzato. Si prega di seguire il link per spiegare perché.
-2
scrivi tu codice di eccezione del previsto nel blocco try eventuale eccezione verrà generata sarà cattura ulteriormente ora è possibile ottenere errore number.now può verificare è un Esteri violazione di chiave 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;
}
}
}
+1
Si prega di non ripetere altre risposte –
Problemi correlati
- 1. Trova se è stata generata una SQLException a causa di un duplicato
- 2. Come si aggiunge una password a una chiave privata OpenSSH che è stata generata senza password?
- 3. Come sapere se una sessione è stata impostata
- 4. Come posso sapere se è stata caricata Google Visualization
- 5. Controllo di Laravel se una raccolta contiene una chiave esterna
- 6. Come posso sapere se una casella di controllo è stata effettivamente selezionata?
- 7. Come posso sapere se la connessione è stata misurata?
- 8. Come posso sapere se una query di dialogo dell'interfaccia utente jquery è stata inizializzata?
- 9. Come faccio a sapere se una tabella è una matrice?
- 10. MySQL: Inserisci se esiste una chiave esterna
- 11. IntegrityError: violazione della chiave esterna all'eliminazione
- 12. Come posso sapere se una chiamata $ (".."). Each() è stata interrotta prima del tempo?
- 13. Come faccio a sapere se una filiale è stata unita al tronco?
- 14. Esiste un modo per sapere se un'eccezione MS CRM è stata generata da un plug-in?
- 15. Come verificare se una classe è stata inizializzata?
- 16. Una chiave esterna può agire come una chiave primaria?
- 17. Come faccio a sapere se una goroutine è stata eseguita, senza bloccare?
- 18. Mappatura di una chiave primaria come chiave esterna nel database
- 19. Chiave esterna a una delle tante tabelle?
- 20. Come posso sapere se una variabile VARCHAR contiene una sottostringa?
- 21. Come sapere se PropertyInfo è una raccolta
- 22. Come sapere se JQuery errore significa chiamata è stata interrotta
- 23. Come eseguire il codice solo se è stata generata un'eccezione?
- 24. Android WebView causa una violazione StrictMode
- 25. Aggiunta di una chiave esterna a un modello di rotaie
- 26. Come posso eliminare una tabella se esiste un vincolo di chiave esterna in SQL Server?
- 27. Come faccio a verificare se una variabile è stata inizializzata
- 28. Come posso sapere quando una parte di un file è stata cancellata in git?
- 29. È stata generata un'eccezione di tipo "System.OutOfMemoryException".
- 30. Eliminazione a cascata di una chiave esterna in Codice Prima
Se segui il collegamento e leggi, noterai che il codice sopra riportato è un esempio di come * not * non lo fa ... – bornfromanegg
Assolutamente corretto: avevo solo intenzione di avere questo codice qui per mostrare una versione espansa della cattura degli errori. Suppongo che dovrei mettere un avviso da non usare (poiché questo è il problema con l'altra pagina). – aronchick