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.