try-catch chaque connexion db?
Est-il recommandé de mettre un bloc try-catch dans chaque fonction qui ouvre une connexion DB et le journal de l'erreur, ou devrais-je plutôt repérer les erreurs dans une couche supérieure de l'application?
public static Category GetCategoryByName(string name)
{
Category result;
try
{
using (IDbConnection conn = ConnectionHelper.CreateDbConnectionByName(_connectionStringName))
{
conn.Open();
using (IDbCommand cmd = conn.CreateCommand())
{
//do stuff
}
}
}
catch(Exception e)
{
//log error here?
}
return result;
}
ou plutôt
try
{
Category myCat = DataTools.GetCategoryByName("myCat");
//other stuff
}
catch(Exception e)
{
//log error here?
}
Pour résumer: si des erreurs sont pris le plus tôt possible dans le code? Ou devrais-je plutôt les attraper où je avoir plus d'informations sur le contexte?
OriginalL'auteur magnattic | 2011-01-13
Vous devez vous connecter pour publier un commentaire.
Comme toujours, ça dépend, mais en général, seul hic, une exception si vous pouvez faire quelque chose, ou que vous avez le code spécifique (par exemple, une nouvelle tentative) pour arriver, sinon, laissez l'exception de la bulle et la première couche peut se connecter/traiter avec elle de manière centralisée.
De toute autre manière les résultats dans beaucoup de code d'enregistrement intercalés avec toute la logique métier.
OriginalL'auteur Paddy
Lors de la capture des exceptions, toujours essayer d'utiliser le plus précis d'exception que vous pouvez. Par exemple, lors de l'utilisation de SQL Server, attraper le SqlException car elles contiennent beaucoup plus d'informations à propos de la exceptin qu'un générique Exception. Vous pouvez obtenir réelle de la ligne de numéros et autres pièces utiles de l'information diagnostique.
Après que vous avez extrait et enregistré tout ce qui est associé, relever de l'exception ou de l'envelopper dans moins d'exception spécifique comme un InvalidDataException ou de l'Exception et de les jeter. Ensuite, vous pouvez attraper ces exceptions génériques à des niveaux supérieurs.
Lorsque vous appelez cette méthode à partir d'un niveau supérieur, vous pouvez juste attraper la InvalidOperationException. Si les niveaux les plus élevés avez besoin de plus de détail, le InnerException fournira la SqlException qui peut être consulté.
L'approche générale de la gestion des exceptions que j'ai suivi est à seulement compris ce que je peut utilement agir. Il n'y pas de point dans la capture vraiment l'Exception générale aux niveaux inférieurs du code puisque vous pouvez réellement attendre de tout de se tromper ou d'être en mesure de récupérer à partir de chaque exception par exemple OutOfMemoryException ou StackOverflowException.
OriginalL'auteur Tomas McGuinness
J'aime la première approche mieux, mais vous avez encore à quoi d'autre à faire, j'ai le bloc catch...
OriginalL'auteur Erich Kitzmueller
J'ai l'Habitude de seulement gérer les exceptions dans l'INTERFACE utilisateur, tout en dessous que j'ai toujours jeter en arrière pour le haut niveau. De cette façon, la trace de la pile a été maintenu tout bien. Vous pourriez toujours vous connecter et de le jeter.
J'ai utilisé cette avant aussi:
OriginalL'auteur WraithNath