Problème de datareader

[Résolu]
Signaler
Messages postés
12
Date d'inscription
lundi 20 janvier 2003
Statut
Membre
Dernière intervention
24 avril 2007
-
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
-
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

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
29
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
Messages postés
12
Date d'inscription
lundi 20 janvier 2003
Statut
Membre
Dernière intervention
24 avril 2007

Merci pour cette réponse, je vais la passer en "normal" pour la contenir à la session du user.

Benjamin
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
29
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
Messages postés
12
Date d'inscription
lundi 20 janvier 2003
Statut
Membre
Dernière intervention
24 avril 2007

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