beny1303
Messages postés12Date d'inscriptionlundi 20 janvier 2003StatutMembreDernière intervention24 avril 2007
-
23 avril 2007 à 14:29
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 2010
-
24 avril 2007 à 17:57
Bonjour,
J'ai une appli asp.net (c#) qui utilise un datareader pour des requêtes SQL qui est fermé et ouvert à la demande. Pour la connexion je fais la même chose, j'ouvre et je ferme quand j'en ai besoin.
Depuis quelques temps j'ai un problème où le datareader ne s'ouvre pas ou parfois ne se ferme pas. il y a peut être trop de users simultanés..
J'ai mis toutes les fonctions de dialogue avec sql (dont le datareader) dans une classe statique.
Je voulais savoir si le fait que cette classe soit statique pouvait poser des problèmes par exemple si 2 users sur le site font une requête en même temps (et leurs datareaders se marcheraient dessus).
En gros : Est-ce que le datareader , même dans une classe statique, reste attaché à la session du user en cours?
J'avoue ne pas bien comprendre le schéma de connexion entre les users connectés à IIS, le datareader et SQL.
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 24 avril 2007 à 01:52
Bonsoir,
une classe static est chargé pour l'application ASP.net, cela veut dire que tous les membres seront partagé entre les requetes, donc si tu as déclaré une variable static dans cette classe, elle sera partagé par toutes les requetes. Bref c'est une mauvaise idée dans la plupart des cas, il vaut mieux revoir l'architecture et ne pas partager tes objets de connexions entre toutes requetes HTTP (donc ne pas les déclaré en static)
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 24 avril 2007 à 11:08
en normal ?
non ce n'est pas non plus une bonne idée de la contenir à la session du user, à chaque requete tu ouvre et ferme la connection et le sqlcommand c'est ce qu'il y a de plus simple.
beny1303
Messages postés12Date d'inscriptionlundi 20 janvier 2003StatutMembreDernière intervention24 avril 2007 24 avril 2007 à 14:04
Oui j'ouvrais et je fermais déjà la connexion à chaque requête. Le seule problème est qu'elle était en statique. Du coup en suivant ont conseil j'ai maintenant une classe que j'instancie au départ de la session et que j'appelle à la demande. Je n'étais pas certain d'avoir compris ta dernière explication quand tu écris qu'il ne faut PAS contenir à la session du user. Dans mon cas c'est justement ce qui m'intéresse à savoir que chaque session aie son instance de classe de mapping.
Benjamin
Vous n’avez pas trouvé la réponse que vous recherchez ?
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 24 avril 2007 à 17:57
Le problème est si tu fais 2 requetes en meme temps en utilisant la meme session, dans ce cas ton objet SqlCommand devra faire 2 choses en meme temps et boom ! il faut pas partager l'objet SqlCommand, pour l'objet SqlConnection c'est possible mais déconseillé ou alors faut bien gerer le multithreading et c'est pas évident (en gros faut gerer un pool)