jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 16 oct. 2007 à 09:53
Non,
le module, contient des méthodes static qui sont global à l'application. En ouvrant la connection dans le init de la page et en le fermant dans le unload, tu vas d'abord laisser la connexion trop longtemps ouvert (le unload se fait tard) et surtout si tu as 2 requêtes simultannées alors tu as un sacré bordel en perspective :p
Si tu veux faire de la sorte, il ne faut pas passer par une variable static (module) mais mettre la connexion accessible seulement pour la page via Page.Items["conn"] = conn;
Sinon, utilise les using.
using reader as SqlDataReader = GetReader()
while reader.read
end while
end using
le using fait automatiquement un dispose qui lui même fera le close. Il est aussi inutile de faire =nothing.
La solution d'ouvrir et fermer une connexion par page peut paraitre séduisante MAIS ca suffira seulement pour des petits sites, car tupourras pas avoir beaucoup de requête simultannées.
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 15 oct. 2007 à 17:37
Bonjour,
le vCmd = nothing ne sert à rien, en faisant un dispose le garbage sait que l'objet ne sert plus à rien et qu'il peut le nettoyer quand il en aura envie.
Sinon, oui il faut toujours faire un dispose sur le datreader et la connection c'est meme ce qui permet de lacher la connexion à sql ...
Comme tu retournes ton sqldatreader il faut faire le dispose dans la méthode appellante (le dispose fait automatiquement le close)
Je te conseille d'utiliser le mot clé using
using reader as sqldatareader = getReader()
end using
ca fera le dispose et donc le close automatiquement.
Par contre ce qui est mal c'est de mettre la connexion en session !!! :-| je suis de l'avis de mettre une requete=une connexion. On peut ouvrir seulement 20 connexions simultannées (il me semble valeur par défaut). Si tu as plus de 20 utilisateurs alors t'es cuit :p
Bref créer une connexion par requete, la création d'une connexion n'est pas si couteuse que ca, puisque ADO.net gère déjà un pool de 20 connexions ...
En faisant ca, il faudra impérativement fermer la connexion après utilisation. Dans le cas de la méthode GetReader il faudra rajouter un paramètre dans command.ExecuteReader(xxxx) pour lui dire de fermer automatiquement la connexion lorsque l'on ferme le reader.
cs_aloisio11
Messages postés126Date d'inscriptionlundi 18 septembre 2006StatutMembreDernière intervention 7 décembre 2009 16 oct. 2007 à 10:04
Merci.
A part le Unload je peux fermer dans quel événement ?
Quand j'ai des requêtes qui se croisent j'utilise une Datatable et un DataReader.
Pour la connexion par page elle est préférable car sur une page je peux me retrouver avec 200 voir 300 requêtes, ce qui serait beaucoup trop lourd s'il y avait 200-300 connexions, ouvertures, fermetures.
Avant je faisais cela et je trouve qu'avec une connexion par page les perf sont meilleurs.
Vous n’avez pas trouvé la réponse que vous recherchez ?