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

Windows Forms Discussion :

[C#] [MSDE] Connexion qui se ferme après appel de fonction


Sujet :

Windows Forms

  1. #1
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut [C#] [MSDE] Connexion qui se ferme après appel de fonction

    j'ai un casse-tête depuis hier avec une connexion à ma base MSDE qui se ferme toute seule à un certain moment.
    Voilà le détail : j'ai un constructeur qui insère dans ma base toutes sortes de données grâce à des fonctions :
    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
    public static SqlConnection connection;
     
    public monConstructeur()
    {
      //connection à la base
      connection = db.Connection();
     
      //Exécution de plusieur fonctions...
     
      //appel de la fonction pour insérer les coordonnées
      setPointCoordinates(); ---> Pb 1
     
      //appel de la fonction pour insérer la liste d'attributs
      setAttributesList(pt_id); ---> Pb 2
    }
    le problème est que dès que je rentre dans setPointCoordinates() la connection se ferme par magie et j'ai un message d'erreur (Pb 1) :
    System.InvalidOperationException: ExecuteReader requiert une connexion ouverte et disponible. L'état actuel de la connexion est Closed.
    Pourtant voilà la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void setPointCoordinates()
    		{
    			line = line.Replace("Point ", " ").Trim();
    			string [] tabCoord = line.Split(' ');
    			ArrayList alCoord = new ArrayList();
    			alCoord.Add(pt_id);
    			alCoord.Add(float.Parse(tabCoord[0].Replace('.', delimiter)));
    			alCoord.Add(float.Parse(tabCoord[1].Replace('.', delimiter)));
    			alCoord.Add(-1);
    			db.addCoordinate(alCoord, connection);
    			alCoord.Clear();
    		}
    Alors j'ai pensé à remplacer, dans le constructeur, la fonction par le code de la fonction mais si je fais ça j'ai un autre message d'erreur (Pb 2) :
    System.InvalidOperationException: ExecuteReader : la propriété Connection n'a pas été initialisée.
    Ca me rend fou, je ne comprends vraiment pas pourquoi j'ai cette erreur sachant que quand j'utilise l'espion à Pb 1 j'ai ça à l'appel de la fonction :
    >? connection.State
    Open
    >? connection.State
    Closed
    et à Pb 2 j'ai ça :
    >? connection.State
    Open
    >? connection.State
    erreur : 'connection.State' n'existe pas
    S'il vous plait aidez moi je vais devenir fou.
    d'avance.

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    On peut voir ta méthode Connection(); :

    Et quelles fonctions tu exécutes ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    //Exécution de plusieur fonctions...
    :

  3. #3
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    alors la méthode Connection c'est ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // Chaîne de connexion
    string connectString = @"database=**** ; server=**** ; User ID=**** ; pwd=****";
    // Objet connection
    SqlConnection connection = new SqlConnection(connectString);
    // Ouverture
    connection.Open();
    return connection;
    Mais je vois pas pourquoi ça viendrais de là étant donné que je l'utilise avant et que tout marche.

    Heu... je vais tépargner le code et simplement te dire que je fais ça (en gros avant) :
    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
    //tant qu'on est pas au bout du fichier mif	
    while ((line = readerMif.ReadLine()) != null)
    {
    	if(...)
    	{
    	//--------------------REGION--------------------//
    	//traitement d'une région (je t'épargne le code)
    	//--------------------FIN REGION--------------------//
    	}
    	else
    	{
    		//--------------------POINT--------------------//
    		if (line.StartsWith("Point"))
    		{	
    			pt_id = db.addAreaIncomplete(la_id, connection);
     
    			//là ensuite il y a ce que je t'ai marqué au-dessus
    		}
    		//--------------------POINT--------------------//
    	}
    }
    et que le truc c'est que même après cette ligne pt_id = db.addAreaIncomplete(la_id, connection); connection existe toujours et son "State" est bien à Open. C'est juste quand je rentre dans une des 2 fonction que j'ai mon Pb1 qui se fait soit mon Pb2.

  4. #4
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    Il faut savoir que dans la partie REGION, j'ai le même problème au même endroit et pourtant jusqu'à ce que je rentre dans la fonction, connection est Open

  5. #5
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    Salut,

    Où se trouve la fonction setPointCoordinates par rapport au constructeur.

    Je veux dire en terme de portée
    La Théorie c'est quand on comprends tout mais que rien ne fonctionne.
    La Pratique c'est quand tout fonctionne mais qu'on ne sait pas pourquoi !

    Si vous aimez ma réponse, cliquez sur la main verte Merci

  6. #6
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    Dans la même classe.
    Ce sont 2 problèmes spécifiques :
    l'erreur de setPointCoordinates(); c'est :
    System.InvalidOperationException: ExecuteReader requiert une connexion ouverte et disponible. L'état actuel de la connexion est Closed.
    setAttributesList(pt_id); c'est :
    System.InvalidOperationException: ExecuteReader : la propriété Connection n'a pas été initialisée.
    Mais où est le problème :

  7. #7
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    Je suis pas très fort en C# mais il me semble que ta variable connection est déclaré seulement dans le constructeur donc je penses qu'en dehors du constructeur, elle n'existe pas...

    Du moins, je penses
    La Théorie c'est quand on comprends tout mais que rien ne fonctionne.
    La Pratique c'est quand tout fonctionne mais qu'on ne sait pas pourquoi !

    Si vous aimez ma réponse, cliquez sur la main verte Merci

  8. #8
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    justement, c'est une variable globale dans ma classe donc toutes les fonctions de ma classe y ont acces normalment.

  9. #9
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    A aucun momen, tu fais un Close ou tu appelles une méthode qui ferme automatiquement la connexion :

  10. #10
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    T'es sur que c'est uen varaible globale.

    car le code que tu as mis ne semble pas signifier cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // Chaîne de connexion 
    string connectString = @"database=**** ; server=**** ; User ID=**** ; pwd=****"; 
    // Objet connection 
    SqlConnection connection = new SqlConnection(connectString); 
    // Ouverture 
    connection.Open(); 
    return connection;
    Comme tu fais un return connection, j'en déduis que ta déclaration

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SqlConnection connection = new SqlConnection(connectString);
    est local et non globale.
    La Théorie c'est quand on comprends tout mais que rien ne fonctionne.
    La Pratique c'est quand tout fonctionne mais qu'on ne sait pas pourquoi !

    Si vous aimez ma réponse, cliquez sur la main verte Merci

  11. #11
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut

    Après avoir passer l'après-midi dernier, la matinée et le début d'aprem a me peler tout le code en long, en large et en travers, j'ai trouvé le problème :
    je ne faisait pas de Close donc le problème ne venait pas de là
    ce n'est pas non plus ce que tu me dis DotNET74 car la fonction Connection que je me suis faite fait partie d'une auter classe. Dans la classe où je suis je ne fais que créer un objet de l'autre, j'appelle Connection puis je place le return en variable globale.

    Le problème est que quelque part dans mon programme je refaisait à un moment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SqlConnection connection = new SqlConnection(connectString);
    Il y a quelque chose que je ne comprends tout de même toujours pas : entre le moment ou je rappellais Connection et le moment où j'avais les erreurs, il y avait des fonctions qui accédaient à la base. Pourquoi passaient-elles très bien tandis que celles au milieu du programme plantée :
    Je vous remercie tout les 2 beaucoup d'avoir pris le temps de réfléchir à mon problème.
    encore.

  12. #12
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    Baahhh de rien.

    A charge de revanche
    La Théorie c'est quand on comprends tout mais que rien ne fonctionne.
    La Pratique c'est quand tout fonctionne mais qu'on ne sait pas pourquoi !

    Si vous aimez ma réponse, cliquez sur la main verte Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Thread non fermé après appel fonction dans DLL
    Par colorid dans le forum Langage
    Réponses: 6
    Dernier message: 02/04/2013, 16h19
  2. Expander qui se ferme après modif de l'expression bindé
    Par dachman dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 29/06/2009, 12h57
  3. Réponses: 1
    Dernier message: 04/11/2008, 10h16
  4. Connexion qui se ferme
    Par ikritt2 dans le forum Services Web
    Réponses: 6
    Dernier message: 14/05/2008, 11h00
  5. Réponses: 6
    Dernier message: 16/08/2006, 15h56

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