Pb de connexion

blowlagoon Messages postés 38 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 26 mars 2007 - 15 févr. 2007 à 18:14
blowlagoon Messages postés 38 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 26 mars 2007 - 16 févr. 2007 à 12:20
Bonjour,

J'ai un petit pb avc mon code de connexion sur ma page principale. je m'explique :
J'ai placé mon code de connexion sur ma master page on me disant que sur le load de ma page la connexion s'effectue une fois pour tte durant tte la durée de l'utilisation de l'applis web. sauf que lorsque j'ai ajouté un treeview dans ma page master et en effectuant un clique sur un noeud pour acceder à une page fille et ce sur l'evenement "TreeView_DataList_SelectedNodeChanged", j'ai une erreur qui est provoquée : {"Timeout expired.  The timeout period elapsed prior to obtaining a connection from the pool.  This may have occurred because all pooled connections were in use and max pool size was reached."}
cela est dû biensur au fait que ma connexion s'ouvre plusieurs fois (plusieurs passage dans le load de la page master).
Donc ma question est pourquoi le code sur le load de la page est executé plusieur fois alors que c le TreeView_DataList_SelectedNodeChanged qui est demandé? Et ma 2eme question est-ce que j'ai bien fait de mettre mon code de conexion sur mon load_page de la master page?

Merci.

4 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
15 févr. 2007 à 22:40
Salut,

Ta méthode est incorrecte.

Le but de dotnet et du web c'est d'être le moins possible connecté à la base.

D'ou l'utiilisation et l'apparition des datasets.

Ensuite, le page load de ta master page est appellé une fois, mais à chaquie requete HTTP (html), c'est a dire à quand la page se recharge.

Les bonnes pratiques veulent, que tu ouvres ta connection et la ferme
dans la meme fonction.

Si tu ne veux pas t"embeter, il faut utiliser les dataset et c'est eux qui ce charge des ouverture et fermeture des connexions.

Ensuite, il y a quelques cas, ou il faut le faire à la main (update et insert delete select complexe)

Une connexion doit durer le moins de temps possible, c'est une ressource et comme toute ressource c'est rare, Donc il faut les economiser.

Bon courage.
0
blowlagoon Messages postés 38 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 26 mars 2007
16 févr. 2007 à 10:00
Merci pour ta reponse....
Normalement c'est la méthode que j'utilise dans le develeoppement Client/serveur...mais j'ai cru lir qques part qu'il faut laisser la conexion ouverte durant tte la session utilisateur. En suite sur mon page load de la page master je fais une verification sur le profil utilisateur pour lui donnée accès ou pas à l'application, donc je sui obligé d'ouvrir ma connexion sur la page_load de la master effectivement je la ferme pas mais c'est pa la la question c'est que je ne saisi pas pk le page_load est executé alors que je sollicite le TreeView_DataList_SelectedNodeChanged .
Ensuite est ce que c'est mieux de mettre mes verifs profils user dans le glabal.asax, sachant que j'ai deja un web.config, est il possible d'avoir les deux dans la mm appli ou on peut mettre du code ds la web.config ce qui me semble pa possibl vu que c'est un fichier xml...enfin je pose des qustion pe etre bete mais je prefere bien comprendre le developpement web, car je suis adepte de travail propre.

Merci de votre aide.
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
16 févr. 2007 à 12:05
Salut,

web.config est un fichier de configuration.
global.asa est un fichier pour la gestion de l'application et des sessions.

Methode debut et fin application, session, et sur erreur.


Pour web.config que tu xml. --> changement à chaud de paramètrage.
Les deux sont faits pour fonctionner de concert.
TreeView_DataList_SelectedNodeChanged fait un postback et recosntruit tourte ta page, voila pourquoi ca passe dans le load.
Tu met un bouton sur ta page tu cliques dessus c'est le meme effet.

Esperant avoir eclaircit tes problèmes.


NB : Un clavier à une touche Entrée
0
blowlagoon Messages postés 38 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 26 mars 2007
16 févr. 2007 à 12:20
Merci pour ta réponse.
Mais honnetement je suis perdu je ne sais pa ou mettre le code suivant :
Pour le moment est sur ma page master d'ou mes erreur au chargement.
sachant que ds ce code je fais à la fois une connexion à la base pour recupèrer le profil user afin de personaliser les accèssur ma page master.

Protected
Sub Page_Load(
ByVal sender
As
Object,
ByVal e
As System.EventArgs)
Handles
Me.Load

Dim IDSlash
As
Integer = 0

Dim IDPTVirg
As
Integer = 0

Dim dbCnx
As
New SqlConnection

Dim dbCmd
As
New SqlCommand

Dim Fct
As
New Fonctions

If
My.User.IsAuthenticated =
True
Then

' Se connecter à la base DataListdbCnx =

New SqlConnection(ConfigurationManager.ConnectionStrings(
"DataListConnectionString").ConnectionString)dbCnx.Open()

' Tester l'accessibilité de la base DataList

Select
Case dbCnx.State

Case Data.ConnectionState.BrokenMsgBox(

"La base DataList est cassée.Contactez votre DBA!!", MsgBoxStyle.Critical,
"DataList Inaccessible")

Me.lbl_Binevenue.Text =
"DataList Inaccessible."

Me.lbl_Binevenue.Font.Size = FontUnit.Large

Me.lbl_Binevenue.Visible =
True

Exit
Sub

Case Data.ConnectionState.ClosedMsgBox(

"La base DataList est fermée.Contactez votre DBA!!", MsgBoxStyle.Critical,
"DataList Inaccessible")

Me.lbl_Binevenue.Text =
"DataList Inaccessible."

Me.lbl_Binevenue.Font.Size = FontUnit.Large

Me.lbl_Binevenue.Visible =
True

Exit
Sub

End
Select 

' Récupération du nom utilisateur Système.IDSlash =

My.User.Name().IndexOf(
"")

' S'assurer que l'utilisateur est un profile admis à accèder à la Base DataListFct.RecupDataProcStockParam(dbCnx,

"ADL_SEL_PROFIL_USER",
My.User.Name().Substring(IDSlash + 1))

If Fct.gsProfile <>
"Utilisateur inexistant"
ThenIDPTVirg = Fct.gsProfile.IndexOf(

";")

Me.lbl_TitreApp.Text = ConfigurationManager.AppSettings(
"Titre_Principal")

Me.lbl_Titre_Entite.Visible =
True

Me.lbl_Titre_Entite.Text = Fct.gsProfile.Substring(IDPTVirg + 1)

Me.lbl_Binevenue.Text =
"Session ouverte avec le compte : " +
My.User.Name().Substring(IDSlash + 1)

Me.lbl_Binevenue.Visible =
True

Me.TreeView_DataList.Visible =
True

Me.TreeView_DataList.CollapseAll()

Else

Me.lbl_TitreApp.Text =
"Application DataList"

Me.lbl_Titre_Entite.Visible =
False

Me.lbl_Binevenue.Text =
"Utilisateur non admis. Contactez l'administrateur pour qu'il vous crée."

Me.lbl_Binevenue.Font.Size = FontUnit.Medium

Me.lbl_Binevenue.Visible =
True

Me.TreeView_DataList.Visible =
False

Exit
Sub

End
If

' Fermer la connexiondbCnx.Close()

dbCnx =

Nothing

Else

Me.lbl_Binevenue.Text =
"Utilisateur non autorisé."

Me.lbl_Binevenue.Font.Size = FontUnit.Large

Me.lbl_Binevenue.Visible =
True

End
If

'Initialisation de la date du jour pour affichage.

Me.lbl_DtVal.Text =
Date.Now.ToString(
"D")

End
Sub
0
Rejoignez-nous