69 votes

J'ai pris une exception!! Maintenant ce qui?

J'ai commencé à l'aide de blocs try catch (un peu en retard, je sais!), mais maintenant, je ne suis pas sûr de quoi faire avec l'exception une fois que je l'ai attrapé. Que dois-je faire?

Try
    connection.Open()
    Dim sqlCmd As New SqlCommand("do some SQL", connection)
    Dim sqlDa As New SqlDataAdapter(sqlCmd)
    sqlDa.Fill(dt)
Catch ex As SQLException
    ' Ahhhh, what to do now!!!?
Finally
    connection.Close()
End Try

64voto

Will Points 76760

Règle de base pour la gestion des exceptions-Si vous ne savez pas quoi faire avec elle, ne pas l'attraper.

24voto

SLC Points 13490

Que voulez-vous faire? Il dépend entièrement de votre application.

Il pourrait être réessayer, vous pouvez afficher une messagebox à l'écran, écrire dans un journal, les possibilités sont infinies.

En tant que développeur, vous ne pouvez pas prévoir toutes les erreurs possibles. C'est une bonne idée d'avoir génériques de code catch, même si vous ne savez pas comment réparer l'erreur. Vous pourriez économiser à une base de données, et l'un des 50 de la base de données des erreurs peuvent se produire, et vous ne serez pas en mesure d'écrire du code pour gérer tout seul.

Vous devriez mettre un générique catch pour vous assurer que votre programme ne se contente pas de crash, et dans certains cas, le simple affichage de l'erreur et laisser l'autre aller est assez. Imaginez si la cause était "disque plein". Vous pourriez simplement imprimer l'exception, et permettent à l'utilisateur d'essayer de nouveau - ils sachent quoi faire, et de résoudre le problème eux-mêmes.

C'est pourquoi je suis en désaccord avec le commentaire à propos de manipulation si vous ne savez pas quoi faire. Vous devez toujours gérer, même si c'est juste pour afficher une messagebox disant "Erreur", parce que c'est infiniment mieux que "Ce programme a effectué une opération non conforme et va être fermé."

20voto

Colin Pickard Points 23922

Il repose sur une logique d'entreprise, mais vous voudrez peut-être faire une ou plusieurs des options suivantes.

  • La restauration de votre transaction
  • Journal de l'erreur
  • Alerte à tout utilisateur de l'application
  • Recommencer l'opération
  • Renvoyer l'exception

Vous pouvez aussi vérifier si l'exception est d'un type que vous pouvez gérer avant que l'un des ci-dessus.

Un bon article sur VB.NET la gestion des exceptions est la gestion des exceptions dans VB.NET par Rajesh VS.

14voto

Joel Coehoorn Points 190579

Je vois beaucoup de recommandations de ne pas attraper si vous ne savez pas quoi faire avec elle. C'est seulement une sorte de droit. Vous devez attraper les exceptions, mais peut-être pas à ce niveau. À l'aide de votre code pour un exemple, j'aimerais écrire plus comme ceci:

Using connection As New SqlConnection("connection string here"), _
      sqlCmd As New SqlCommand("do some SQL", connection), _
      sqlDa As New SqlDataAdapter(sqlCmd)

    sqlDa.Fill(dt)
End Using

Non seulement il n'y a pas de Try/Catch/finally, il n'y a pas d'ouvrir ou de fermer. L' .Fill() la fonction est documentée que l'ouverture de la connexion si nécessaire, et l'Utilisation de bloc fera absolument certain qu'il est fermé correctement, même si une exception est levée.

Cela vous laisse libre pour attraper les exceptions à un niveau plus élevé — dans l'INTERFACE utilisateur ou code de commerce, les appels à la fonction où votre requête s'exécute, plutôt qu'ici à la requête elle-même. Ce niveau plus élevé de code est dans une bien meilleure position pour prendre des décisions sur la façon de procéder, quel enregistrement qui doit arriver, ou de montrer un meilleur message d'erreur à l'utilisateur.

En fait, c'est cette capacité d'exceptions à la "bulle" dans votre code, qui les rend si précieux. Si vous avez toujours attraper une exception là où il est lancé, que les exceptions ne sont pas d'ajouter beaucoup de valeur au-delà de la vb de vieux "on Error Goto X" de la syntaxe.

9voto

laura Points 4445

Cela dépend de ce que l' sql ne vraiment. Est-ce quelque chose:

  • que l'utilisateur n'a ? Peut-être créer un compte ou d'un message - ensuite, vous devez en informer l'utilisateur que quelque chose est incorrect
  • que la demande n'est naturellement ? Comme le nettoyage de journaux ou quelque chose de similaire? Est-elle fatale? La demande peut-elle aller? Est-ce quelque chose qui peut être ignoré - peut-être retentée? Si l'administrateur seront-ils annoncés?

Commencez par ces questions, ils vont généralement de donner des réponses sur la façon de traiter les exceptions

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X