Utilisation de l'instruction – est-ce plus utile pour la connection SQL que l'adaptateur SQL?

Je sais que l'instruction suivante est utile pour la récupération de place. Effectivement, il doit être le même que Try / Catch / finally. Si je l'utilise pour la connection sql dois-je également imbriquer une autre instruction 'using' pour un adaptateur sql? Et puis un autre nested en utilisant pour le DataSet?

using() { } 

Un autre ajout à la question est si je veux utiliser la même connection à travers plusieurs methods, alors il est préférable d'avoir 'Using ()' dans chacune des methods, ou puis-je simplement créer cet object de connection une fois?

Oui, vous devez utiliser l'instruction using pour disposer de tout ce qui implémente IDisposable . L'instruction using ne parle pas vraiment de garbage collection, mais de ressources (autres que la memory). DataSet et SqlDataAdapter sont des instances de IDisposable .

Le bloc using signifie que vous garantissez que les ressources que contient l'object sont disposées de manière déterministe et en time opportun. Sans using , il n'y a aucune garantie quand ces ressources seront libérées. Cela peut entraîner des fuites de ressources, telles que l'épuisement des handles de files.

Une autre chose qui mérite d'être soulignée est que vous pouvez combiner plusieurs instructions using en un seul bloc comme ceci:

 using (SqlConnection connection = new SqlConnection("connectionSsortingng")) using (SqlCommand command = new SqlCommand("SELECT * FROM Users", connection)) { // Do something here... } 

Une fois que vous avez quitté ce bloc (soit en atteignant la fin du bloc ou qu'une exception a été levée), les objects SqlConnection et SqlCommand seront automatiquement éliminés.

using n'est pas la même chose que try/catch/finally !! using s'assure que Dispose est automatiquement appelé sur l'object IDisposable entre parenthèses, alors que

 using (SqlConnection conn = new SqlConnection(...)) { } 

est le même que

 SqlConnection conn = new SqlConnection(...); try { } finally { conn.Dispose(); } 

il n'y a pas de bloc de capture impliqué du tout aucune erreur n'est détectée!

Si vous souhaitez disposer de tous les objects jetables que vous créez en time voulu, alors oui, vous devez utiliser un bloc d' using pour chacun d'entre eux.

Il peut être plus facile de lire parfois pour créer tout en dehors du bloc try et ensuite de tout jeter dans un bloc finally (un exemple pour cela serait de dessiner dans les applications Windows Forms.) Parfois, vous avez besoin de plusieurs pinceaux et stylos. try , utilisez-les dans le bloc et jetez-les dans le bloc finally ).

C'est essentiellement une question de style de encoding.

Le statut d' using est destiné à être utilisé pour chaque instance d'une class qui implémente l'interface IDisposable . Sa relation avec le GC (garbage collector) est que vos instances libèrent leurs ressources avant que le GC ne le fasse. C'est très utile pour les ressources partagées, et aide avec la concurrency.

En ce qui concerne votre question, oui, vous devez utiliser l'instruction using sur Connection, et Adapter.


En ce qui concerne le bloc try and catch, il n'y a pas de similarité avec l'instruction using. Les deux d'entre eux sont utilisés à des fins différentes. Un (en utilisant) est utilisé pour libérer les ressources tôt, l'autre est utilisé pour traiter les erreurs, qu'elles soient inattendues ou attendues