IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Connexion ouverte alors que c'est pas vrai


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut Connexion ouverte alors que c'est pas vrai
    Désolé pour le titre, mais en fait, je sais pas quoi mettre.
    Mon souci n'est pas trés clair car je ne sais même pas trop par où commencer.

    Je vais tenter de planter le contexte (et pas le serveur ! ) et faire des commentaire sur la pile que je poste plus bas.

    Donc, j'ai mis un GridView dans mon composant Utilisateur, qui se trouve dans une page qui fait référence à une MasterPage.
    Mon GridView se rempli bien. Il est construit pour partie dans le CodeBehind avec une fabrication des colonnes dynamique. Il est liée à un sqlDataSource dont je place la SelectComamnde dans le Init du Composant, le reste étant dans le code HTML.

    Bref, tout se passe bien jusqu'au moment où je clique sur le ButtonField que j'ai placé à la fin de chaque ligne.
    Ce bouton field est censé m'ouvrir une popup par le biais d'un JScript. Le code JScript n'est pas à remettre en cause car le souci n'est avec lui et il fonction aussi bien dans d'autre cas.

    Ce qu'il se passe c'est ça :
    La connexion n'est pas fermée. L'état actuel de la connexion est ouvert.
    Et la pile indique cela et je vous donne des commentaires ensuite :
    [InvalidOperationException: La connexion n'est pas fermée. L'état actuel de la connexion est ouvert.]
    System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +16
    System.Data.SqlClient.SqlConnection.Open() +111
    FrameWorkTechnique.ADO.DataManager.ExecuterRequeteSimple(String requete) +251

    [AppExecption: La connexion n'est pas fermée. L'état actuel de la connexion est ouvert.]
    FrameWorkTechnique.ADO.DataManager.ExecuterRequeteSimple(String requete) +372
    OutilWeb.OutilsOW.GetApplicationGUID() +111
    OutilWeb.OutilsOW.ParametresOW() +36
    OutilWeb_Liste_Modules.Page_PreInit(Object sender, EventArgs e) +54
    System.Web.UI.Page.OnPreInit(EventArgs e) +104
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1515
    La ligne +54 est dans la apge qui contient le Composant, et donc celle au-dessus aussi.
    La fonction GetApplicationGUID et appelé dans la fonction ParametresOW et les deux font appel à la BDD.

    Mais je ne comrpends aps pourquoi la connexion est ouverte. Le truc qui me permet de faire appel à l aBDD est dans un FrameWork maison qui gère l'ouverture et la fermeture de la connexion à la base.
    Donc j'en ai déduit que c'est le GridView qui prend la connexion et ne la lâche pas.
    Alors comment faire pour en être sûr ?
    Et dans l'affirmative, comment faire pour qu'il ne se recharge pas en cliquant sur le ButtonField ?

    Merci pour votre aide.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Ben a priori c'est la méthode ExecuterRequeteSimple qui essaie d'ouvrir la connexion, sans vérifier si elle est déjà ouverte...

  3. #3
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Pourtant le FrameWork maison qu'on a fait pour gérer les appel à la BDD et donc qui définit cette méthode vérifie l'état de la connexion avant de faire des choses.

    Voici le code de cette fonction, tout ce fait avec un TRY :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    Public Function ExecuterRequeteSimple(ByVal requete As String) As DataTable
                Try
                    ' On assigne une requêtes parametrée à la commande
                    Dim commande As New SqlCommand(requete)
     
                    ' On lui assigne une connexion
                    commande.Connection = Me.Conex
     
                    Adapteur = New SqlDataAdapter(commande)
                    Dim oCommandBuilder As New SqlCommandBuilder(Adapteur)
     
                    Table = New DataTable()
                    Conex.Open()
                    Adapteur.Fill(Table)
     
                    Return Table
                Catch ex As Exception
                    Throw New AppExecption(ex)
                Finally
                    Me.Conex.Close()
                End Try
     
            End Function
    Mais surtout ce que j'aimerais bien savoir c'est : qui ouvre la connexion avant ? Mais je trouve pas le moyen. Je suppose que c'est le GridView, vu qu'il qu'il ne travaille pas avec le FrameWork Maison.

    Alors si c'est bien lui, je voudrais pouvoir lui dire que, lrosqu'on clique sur ce bouton, il n' a pas besoins de ce recharger.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par zooffy Voir le message
    Pourtant le FrameWork maison qu'on a fait pour gérer les appel à la BDD et donc qui définit cette méthode vérifie l'état de la connexion avant de faire des choses.
    Pas dans le code que tu montres en tous cas... tu devrais tester la propriété State de la connexion

  5. #5
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Ouais, je ferais ça lors de la prochaine mise à jour de notre FrameWork.

    Je ne pense pas que le souci vienne de là. En fait, lorsque la page se charge, cette méthode et d'autres sont lu tout à fait normalement, sans poser de souci. le GridView est bien chargé et tous les paramettres de la page sont bien pris en compte.

    Puis je clique sur mon Button et là, j'ai le message. Pour faire des test, j'ai demande au Button de récupérer le contenu d'une cellule du GridView et de l'envoyer dans un label que j'ai mis en haut de la page.
    donc, une fois que j'ai el mesage d'erreur, je tape sur F5 et là, tout redevient normal : le GridView est bien rempli et le contenu de la cellule choisie est biend ans le Label.
    Si je reclique sur une autre ligne, pareil : message, F5, tout bon.

    J'ai fait un test avec le bouton "Modifier" : là pas de souci il ouvre les champs, permet la saisie et enregistre les modifications.

    Bref, j'y perd mon Assembleur...................

  6. #6
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    J'ai poussé le vice un peu plus loin encore, histoire de bien manipuler le tout.
    J'ai tout basculer dans du CodeBehind.

    Voici mon code actuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    	Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
    		Dim gv As New GridView
    		Dim sds As New SqlDataSource
    		With sds
    			.ID = "sdsCampagne"
    			.DataSourceMode = SqlDataSourceMode.DataSet
    			.ConnectionString = ConfigurationManager.ConnectionStrings("CS").ConnectionString
    			.SelectCommand = "EXEC dbo.ListeCampagne '" & GetApplicationGUID().ToString & "'"
    			.DataBind()
    		End With
     
    		Dim id_campagne, libelle, regie As New BoundField
    		Dim apercu As New ButtonField
    		With id_campagne
    			.ItemStyle.CssClass = "invi"
    			.HeaderStyle.CssClass = "invi"
    			.FooterStyle.CssClass = "invi"
    			.DataField = "Id_Campagne"
    		End With
    		With libelle
    			.DataField = "Libelle"
    			.HeaderText = "Libelle"
    			.SortExpression = "Libelle"
    		End With
    		With regie
    			.DataField = "Regie"
    			.HeaderText = "Régie"
    			.SortExpression = "Regie"
    		End With
    		With apercu
    			.CommandName = "Apercu"
    			.ButtonType = ButtonType.Image
    			.ImageUrl = "~/App_Themes/" & GetNomsite() & "/loupe.png"
    			.CausesValidation = False
    		End With
     
    		With gv.Columns
    			.Add(id_campagne)
    			.Add(libelle)
    			.Add(regie)
    			.Add(apercu)
    		End With
    		With gv
    			.PageSize = 15
    			.AllowPaging = True
    			.PagerSettings.Mode = PagerButtons.NumericFirstLast
    			.PagerSettings.Position = PagerPosition.Bottom
    			.AllowSorting = True
    			.AutoGenerateColumns = False
    			.DataSourceID = sds.ID
    		End With
     
    		ListingCampagne.Controls.Add(sds)
    		ListingCampagne.Controls.Add(gv)
    	End Sub
    Tout marche bien, sauf quand je clique sur le Button.
    J'ai passé en revue toute les méthodes et propriétés du GridView mais je n'en trouve pas une qui permet de lui dire de pas se recharger.

    Je commence à désepérer.

Discussions similaires

  1. Réponses: 10
    Dernier message: 22/12/2009, 19h58
  2. [AC-2002] Me.OpenArgs Null alors que ce n'est pas vrai
    Par jaffael dans le forum VBA Access
    Réponses: 3
    Dernier message: 08/06/2009, 17h32
  3. Un URL qui ressemble a un GET alors que c'est un POST
    Par neoncyber dans le forum Langage
    Réponses: 2
    Dernier message: 27/05/2007, 18h20
  4. Réponses: 7
    Dernier message: 30/03/2007, 14h58
  5. [VB 6]Fichier ouvert alors que je l'ai fermé (je comprend pas)
    Par devock dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 07/02/2007, 23h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo