Comment gérer des exceptions SQL spécifiques (par exemple, une violation de contrainte unique) en C #?

Ma question est de savoir comment gérer l’exception SQL en C #. Y at-il un moyen de vérifier quel type d’exception SQL émet de la couche d’access aux données? Par exemple, si db lève une exception de contrainte unique ou une exception de clé étrangère, existe-t-il un moyen de la récupérer à partir de c #? Quel est le modèle de gestion des exceptions que vous utilisez pour ces exceptions de firebase database?

Consultez la documentation de la classe SqlException , en particulier ses propriétés : SqlException.Number , par exemple, devrait vous permettre d’identifier le type d’exception SqlException (contrainte unique, clé étrangère, …).

Vous pouvez utiliser des exceptions filtrées pour intercepter des erreurs spécifiques. VB.NET:

 Try ... Catch ex as SqlException When ex.Number = ... ... Catch ex as SqlException When ex.Number = ... ... End Try 

C # (version 6 et supérieure):

 try { ... } catch (SqlException ex) when (ex.Number == ...) { ... } catch (SqlException ex) when (ex.Number == ...) { ... } 

vous pouvez vérifier le texte du message, le numéro et changer de casse pour connaître l’erreur …

 try { } catch (SqlException ex) { ssortingng str; str = "Source:"+ ex.Source; str += "\n"+ "Number:"+ ex.Number.ToSsortingng(); str += "\n"+ "Message:"+ ex.Message; str += "\n"+ "Class:"+ ex.Class.ToSsortingng (); str += "\n"+ "Procedure:"+ ex.Procedure.ToSsortingng(); str += "\n"+ "Line Number:"+ex.LineNumber.ToSsortingng(); str += "\n"+ "Server:"+ ex.Server.ToSsortingng(); Console.WriteLine (str, "Database Exception"); } 

Cela dépend de l’exception et de votre firebase database. Votre firebase database générera un code d’erreur unique pour des éléments spécifiques tels que les contraintes, les permissions, etc., mais ce code d’erreur varie d’une base à l’autre. Oracle a un fichier PDF MASSIVE (plus de 2000 pages) qui répertorie toutes les erreurs possibles, et je suis sûr que Sqlserver a quelque chose de similaire. Ce que je veux dire, c’est que vous recherchiez des codes d’erreur spécifiques, vous devez alors identifier uniquement ceux de la section catch et les gérer différemment, puis la multitude d’autres erreurs que vous pouvez obtenir.

Catch SqlException

 catch(SqlException ex) { foreach(SqlError error in ex.Errors) { } }