Existe-t-il un moyen d'get le "nom de contrainte" exact "C #" Microsoft SQL Exception ", numéro d'erreur 2601 ou 2627, mais sans parsingr le text de la" propriété Message "?
Par exemple:
catch (SqlException e) { switch (e.Number) { case 2601: /* Here i want to know the constraint name in case i have more than one on a specific table, so i will be able to display the correct error message to the user. For example: case IX_Username: throw new Exception("Username duplication") case IX_PhoneNumber: throw new Exception("PhoneNumber duplication") */ break; default: throw; } }
Utilisez une convention de nommage pour les contraintes, par exemple, nommez-les pour toujours contenir un trait de soulignement comme FK_Xxx
ou UQ_Xxx
puis utilisez regex pour parsingr les erreurs pour des noms comme celui-ci
var match = Regex.Matches("Foreign key FK_Xxx violation.", @"\b\w*_\w*\b") .Cast<Match>().FirstOrDefault(); return match != null ? match.Value : null;
Existe-t-il un moyen d'get le "nom de contrainte" exact "C #" Microsoft SQL Exception ", numéro d'erreur 2601 ou 2627, mais sans parsingr le text de la" propriété Message "?
Non, il n'y a pas de telle manière.