la mia domanda è come gestire l'eccezione sql in C#, c'è comunque un modo per verificare quale tipo di eccezione sql getta dal livello di accesso ai dati? Ad esempio, se db lancia un'eccezione di limitazione univoca, o un'eccezione di chiave esterna, esiste un modo per catturarla da C#? qual è il modello di gestione delle eccezioni che stai utilizzando per queste eccezioni db?Come si gestiscono eccezioni SQL specifiche (ad esempio, una violazione del vincolo univoco) in C#?
Come si gestiscono eccezioni SQL specifiche (ad esempio, una violazione del vincolo univoco) in C#?
risposta
Cattura SqlException
catch(SqlException ex)
{
foreach(SqlError error in ex.Errors)
{
}
}
è possibile controllare il testo del messaggio, numero e si fa passare caso su di esso per conoscere l'errore ...
try {
}
catch (SqlException ex)
{
string str;
str = "Source:"+ ex.Source;
str += "\n"+ "Number:"+ ex.Number.ToString();
str += "\n"+ "Message:"+ ex.Message;
str += "\n"+ "Class:"+ ex.Class.ToString();
str += "\n"+ "Procedure:"+ ex.Procedure.ToString();
str += "\n"+ "Line Number:"+ex.LineNumber.ToString();
str += "\n"+ "Server:"+ ex.Server.ToString();
Console.WriteLine (str, "Database Exception");
}
Dai un'occhiata alla classe documentation of the SqlException, in particolare , al suo properties: SqlException.Number
, ad esempio, dovrebbe consentire di identificare quale tipo di SqlException (vincolo univoco, chiave esterna, ...) si è verificato.
È possibile utilizzare le eccezioni filtrate per rilevare errori specifici. VB.NET:
Try
...
Catch ex as SqlException When ex.Number = ...
...
Catch ex as SqlException When ex.Number = ...
...
End Try
C# (versione 6 o superiore):
try
{
...
}
catch (SqlException ex) when (ex.Number == ...)
{
...
}
catch (SqlException ex) when (ex.Number == ...)
{
...
}
Dipende l'eccezione e terminale database. Il database produrrà un codice di errore univoco per cose specifiche come vincoli, permessi, ecc. Ma che il codice di errore varia da DB a DB. Oracle ha un pdf MASSIVE (2000+ pagine) che elenca ogni possibile errore che può generare e sono certo che Sqlserver ha qualcosa di simile. Il mio punto è che stai cercando codici di errore specifici, quindi devi solo quelli nella sezione di cattura e gestirli diversamente dalla moltitudine di altri errori che puoi ottenere.
- 1. Violazione del vincolo univoco durante l'inserimento: perché? (Oracle)
- 2. Violazione del vincolo univoco sull'aggiornamento da Magento 1.4.0 a 1.6.2.0
- 3. Oracle SQL vincolo univoco A a B, B ad A
- 4. Vincolo univoco rispetto all'indice univoco
- 5. Si è verificata una violazione del vincolo di integrità referenziale
- 6. Violazione del vincolo univoco Oracle che fa riferimento a un vincolo che non sembra esistere
- 7. vincolo univoco condizionale
- 8. Violazione del vincolo LDAP quando si modifica la password in AD tramite ldapmodify
- 9. LINQ to SQL ignorano eccezione vincolo univoco e continuano
- 10. Vincolo univoco in un'architettura RESTFul
- 11. Come creare un vincolo univoco composito in SQL Server 2005
- 12. Problema di vincolo univoco di SQL Server
- 13. Come posso rilevare l'eccezione di violazione del vincolo da EclipseLink?
- 14. Modifica vincolo univoco in Oracle
- 15. SQL Oracle valore vincolo univoco tra più colonne
- 16. controllo vincolo univoco in JPA
- 17. Eliminazione del vincolo univoco per la colonna in H2
- 18. Cassandra - vincolo univoco sulla chiave di riga
- 19. EF6 vincolo univoco estera chiave
- 20. Postgres vincolo univoco vs indice
- 21. Vincolo univoco con annotazione dati
- 22. SQL: vincolo univoco quando la colonna è un determinato valore
- 23. MySQL: ALTER IGNORE TABLE fornisce "violazione del vincolo di integrità"
- 24. Postgresql: vincolo condizionalmente univoco
- 25. MongoDB: rimuovere vincolo univoco
- 26. SQL Server 2005 Vincolo univoco su due colonne
- 27. PostgreSQL: condizionale vincolo univoco
- 28. Vincolo univoco condizionale in oracle db
- 29. Gestire le eccezioni nell'entità framework 4
- 30. Devo controllare un vincolo univoco con php?