À chaque fois que vous utilisez des requêtes de code non gérées comme des lecteurs de flux, des requêtes de données, etc., et que vous voulez attraper l'exception, utilisez try catch finally et fermez le flux, le lecteur de données, etc. dans le finally, si vous ne le faites pas, la connexion ne sera pas fermée en cas d'erreur.
SqlConnection myConn = new SqlConnection("Connectionstring");
try
{
myConn.Open();
//make na DB Request
}
catch (Exception DBException)
{
//do somehting with exception
}
finally
{
myConn.Close();
myConn.Dispose();
}
si vous ne voulez pas attraper l'erreur, alors utilisez
using (SqlConnection myConn = new SqlConnection("Connectionstring"))
{
myConn.Open();
//make na DB Request
myConn.Close();
}
et l'objet de connexion sera éliminé automatiquement s'il y a une erreur, mais vous ne capturez pas l'erreur.
3 votes
Que voulez-vous dire par "laisser ouvert" ?
5 votes
Et que voulez-vous dire par "(presque)" ?
1 votes
Ce n'est pas vrai du tout. L'idée est que si une erreur se produit, le contrôle passera au bloc catch. La seule possibilité d'exécuter tout le code est qu'aucune exception ne se produise, et dans ce cas, pourquoi utiliser le try/catch ?
49 votes
Si vous débranchez le cordon d'alimentation pendant qu'une machine exécute une clause try, la clause finally ne sera pas appelée.
5 votes
Lol, oui, c'est vrai, mais on ne peut pas vraiment coder pour ça, n'est-ce pas ?
2 votes
@Ed : Utilisez les transactions. Votre clause try doit faire une sorte de changement temporaire ou en mémoire qui peut être persisté dans un changement unique, atomique, dans la clause finally. Ceci est rarement facile et peut nécessiter un matériel spécial.
0 votes
Pas vraiment C+, mais comme cette question s'applique à tous les langages, voici un bon exemple concret de PHP utilisant MySqli : wiki.php.net/rfc/finally
0 votes
Try-catch-Finally est peut-être né en C (je dis "peut-être" uniquement parce que je ne sais pas s'il existe un langage plus ancien qui le possède ou non), mais il a fait son chemin dans JAVA, Python (en tant que "Try-Except-Finally") et probablement d'autres langages aussi. Je recommande d'ajouter des balises pour d'autres langues sur cette question. Cela m'a aidé à comprendre quelque chose en Python. Merci de l'avoir publiée.