Précédent   Forum du club des développeurs et IT Pro > Dotnet > Accès aux données > ADO.NET
ADO.NET Forum d'entraide sur le développement avec les services d'accès aux données disponibles avec ADO.NET.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 25/04/2012, 17h03   #1
Flaburgan
Modérateur
 
Avatar de Flaburgan
 
Homme
Développeur informatique
Inscription : avril 2010
Messages : 1 195
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : avril 2010
Messages : 1 195
Points : 3 681
Points : 3 681
Par défaut Utilisation de using et fermeture de connexion

Bonjour,

C'est une question de syntaxe, j'aurais aimé comprendre l'utilisation de using.

Imaginons un cas classique :
Code C# :
1
2
3
4
5
6
7
8
9
10
11
 
SQLiteConnection connection = new SQLiteConnection(connectionString);
connection.Open();
SQLiteCommand commande = connection.CreateCommand();
commande.CommandText = @"SELECT * FROM Data;";
SQLiteDataReader reader = commande.ExecuteReader();
while (reader.Read()) {
     //traitement
}
reader.Close();
connection.Close();

Maintenant, j'ai aussi vu qu'on pouvait déclarer SQLiteConnection, Command et Reader dans des using() (je suis tombé sur des exemples). Cependant, les gens fermaient quand même la connexion juste avant de fermer le using. Ils ne le faisaient pas pour le reader par contre.

Donc ma question, à quoi sert le using si on est obligé de faire Close() avant de le fermer quand même ? ça sert à quelque chose de fermer le reader si on l'a ouvert avec un using ? et tant qu'on y est, l'@ avant la commande SQL, ça sert à quoi ?

Voilà, spam de questions :p
__________________
"Historiquement, techniquement, économiquement et moralement, Internet ne peut pas être contrôlé. Autant s’y faire." Laurent Chemla

Je soutiens Diaspora*, le réseau social libre.

Veillez à porter une attention toute particulière à l'orthographe...

Blog collaboratif avec des amis : http://geexxx.fr

Mon avatar a été fait par chiqitos, merci à lui !
Flaburgan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2012, 17h11   #2
gcorbineau
Membre Expert
 
Homme Guillaume
Développeur .NET
Inscription : juillet 2006
Messages : 854
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2006
Messages : 854
Points : 1 296
Points : 1 296
Le using te permet de libérer les ressources utilisé
gcorbineau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2012, 17h26   #3
Flaburgan
Modérateur
 
Avatar de Flaburgan
 
Homme
Développeur informatique
Inscription : avril 2010
Messages : 1 195
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : avril 2010
Messages : 1 195
Points : 3 681
Points : 3 681
Donc si ma méthode se termine la ligne en dessous de "connexion.close", il n'apportera rien ?
__________________
"Historiquement, techniquement, économiquement et moralement, Internet ne peut pas être contrôlé. Autant s’y faire." Laurent Chemla

Je soutiens Diaspora*, le réseau social libre.

Veillez à porter une attention toute particulière à l'orthographe...

Blog collaboratif avec des amis : http://geexxx.fr

Mon avatar a été fait par chiqitos, merci à lui !
Flaburgan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2012, 17h49   #4
h2s84
Modérateur
 
Avatar de h2s84
 
Homme Holty Samba SOW
Développeur .NET
Inscription : mars 2007
Messages : 2 773
Détails du profil
Informations personnelles :
Nom : Homme Holty Samba SOW
Âge : 28
Localisation : Sénégal

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2007
Messages : 2 773
Points : 5 268
Points : 5 268
Envoyer un message via MSN à h2s84 Envoyer un message via Skype™ à h2s84
L’instruction using te permet de libérer les ressources utilisées par l'objet sur lequel on l'applique en appelant implicitement la méthode Dispose de cet objet.

La méthode Dispose() appelle aussi implicitement la méthode Close de ta connexion donc ta dernière instruction connexion.close() ne sert à rien mais apporte plus de lisibilité.
__________________
Consultant .Net chez SoftFluent
Découvrir notre produit CodeFluent Entities

Adhérer à l'association Fier d'être développeur
Les FAQs sur les technologies .Net voir ici
Les cours et tutos sur les technologies .Net voir ici
Les critiques sur les livres parlant des technologies .Net voir ici
Pensez à la balise [CODE]
Pensez au tag si votre problème est résolu
h2s84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2012, 22h02   #5
Pol63
Expert Confirmé Sénior
 
Avatar de Pol63
 
Homme Sébastien
Développeur .NET / DBA SQL SERVER
Inscription : avril 2007
Messages : 10 279
Détails du profil
Informations personnelles :
Nom : Homme Sébastien
Âge : 31
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Développeur .NET / DBA SQL SERVER
Secteur : Industrie

Informations forums :
Inscription : avril 2007
Messages : 10 279
Points : 17 222
Points : 17 222
Envoyer un message via Skype™ à Pol63
pour compléter un peu
les 3/4 des classes du framework sont géré par .net au niveau de la mémoire (vidage quand plus utilisé)
certaines classes utilisent des objets de windows via des appels d'api par exemple, ou des objets qui ne sont pas codés en .net
c'est le cas par exemple des images de System.Drawing, c'est windows qui les gèrent (gdi+ en fait), et aussi des connexions sql, des controles et forms etc...
ces classent ont une méthode Dispose qui averti le truc externe qu'il faut vider la mémoire (car c'est hors de .net)

using / end using ne peut etre utilisé qu'avec des variables de types IDisposable, ca permet d'être sûr que Dispose va être appelé en sortie de bloc using
car si tu déclare ta connexion, que tu l'ouvres, que tu fais une requete qui plante, la suite du code n'est pas exécutée, soit ca va dans le catch si tu as un try catch, soit ca remonte à l'appelant
dans ce cas ca ne passe pas sur connexion.close donc ta connexion ne sera pas fermée, et la mémoire par libérée rapidement
using équivaut en celà à un try/finally, car même en cas d'erreur, le .dispose sera appelé sur la variable en sortie de bloc

je confirme que .dispose sur une connexion appelle .close au passage (donc ferme la connexion)


fermer un reader n'est pas utile si on ferme la connexion, car il sera fermé au passage

Nb : si on oublie d'appeler Dispose sur un objet l'ayant, ce n'est pas forcément grave, .net à un mécanisme de destruction tardive quand même (voir GC et finalize pour plus d'infos) qui fait que Dispose sera appelé quand même
néanmoins dans une boucle qui instancie un grand system.drawing.bitmap par exemple, ne pas faire le dispose fait que l'appli va crasher avec OutOfMemory
Pol63 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 03h40.


 
 
 
 
Partenaires

Hébergement Web