Problème de datareader

Résolu
beny1303 Messages postés 12 Date d'inscription lundi 20 janvier 2003 Statut Membre Dernière intervention 24 avril 2007 - 23 avril 2007 à 14:29
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 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.

Merci de votre aide.

Benjamin

5 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
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)

<hr />Cyril - MSP - MCTS ASP.net & SQ
3
beny1303 Messages postés 12 Date d'inscription lundi 20 janvier 2003 Statut Membre Dernière intervention 24 avril 2007
24 avril 2007 à 08:16
Merci pour cette réponse, je vais la passer en "normal" pour la contenir à la session du user.

Benjamin
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
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.

<hr />Cyril - MSP - MCTS ASP.net & SQL
0
beny1303 Messages postés 12 Date d'inscription lundi 20 janvier 2003 Statut Membre Dernière intervention 24 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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
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)

<hr />Cyril - MSP - MCTS ASP.net & SQL
0
Rejoignez-nous