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

C# Discussion :

La déconnexion à la base de données plante


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Brésil

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 72
    Points : 47
    Points
    47
    Par défaut La déconnexion à la base de données plante
    Salut à tous !
    Lorsque je charge mon formulaire, j'ai un timer de test (1000) pour savoir si je suis toujours connecté à la base de données ou pas.
    Si j'exécute le formulaire et que la base de données est connectée, tout fonctionne , mais si je déconnecte, l'appli plante, puis sans quitter, si je reconnecte, tout rentre dans l'ordre...
    Voici mon code, et je sollicite votre aide afin de "tuer" le processus ou autre propositions afin de remédier à ce soucis :
    Ce code je l'ai mis dans le timer.
    Lorsque je me deconnecte de WAMPServer, tout se plante textbox, bouton etc.
    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
     
                MySqlConnection cnn;
              string  connetionString = "SERVER=localhost;DATABASE=user1;UID=root;PASSWORD=";
                cnn = new MySqlConnection(connetionString);
     
     
                try
                {
                    cnn.Open();
                    base_off.Visible = false;
                    base_on.Visible = true;
                    base_on.Top = (this.Height - base_on.Height) - 9;
                    base_on.Left = (this.Width - base_on.Width) - 10;
                    cnn.Close();
                }
                catch
                {
                    base_on.Visible = false;
                    base_off.Visible = true;
                    base_off.Top = (this.Height - base_off.Height) - 9;
                    base_off.Left = (this.Width - base_off.Width) - 10;
                    cnn.Close();
                }
    PS: base_on et base_off sont des images qui affichent le status de la base de données(Connecté ou non)
    Merci.

  2. #2
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Je pense que ton cnn.Close() dans ton bloc catch doit être la source de tes problèmes. S'il y a eu une exception lors de l'ouverture de ta connexion, alors elle n'est pas ouverte. Tu ne peux donc pas la fermer.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Brésil

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 72
    Points : 47
    Points
    47
    Par défaut
    j'ai enlevé le cnn.close() toujours pareil.
    Je precise que tout ceci est dans un timer.

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    As-tu utilise le mode debug? Met un point d'arret sur la ligne cnn.Open(); et ensuite continue en pas a pas (F10). Tu verras quand le curseur partira dans le catch, et tu pourras voir le message d'erreur. Cela te donnera plus d'info sur le probleme et si cela ne t'aide pas a le resoudre, tu peux revenir poster ce message d'erreur ici.

    Note : modifie ton catch comme ceci : catch (Exception ex)
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Peut-être un timeout au niveau de la connexion alors. Et cela aurait d'ailleurs tout son sens.

    S'il y a un timeout disons de 10s et que ton timer s'exécute toutes les secondes, alors, dès que tu tentes une connexion et que le serveur est hors ligne, tu bloques le code de ton timer pendant ces 10s. Et comme le code est exécuté via un timer, si c'est un timer Winforms, alors tu bloques également le thread qui gère l'interface utilisateur, d'où le gel.

    2 possibilités donc :
    • Ou bien tu mets un timeout à la connexion très court ;
    • Ou bien tu utilises des appels asynchrones.


    Dans un premier temps, pour vérifier si le soucis c'est bien ça, je testerai via le premier point. Pour une solution sur le long terme, j'emploierai la solution numéro deux (car ce n'est pas jamais une bonne idée de bloquer le thread qui gère l'UI, même pendant un temps très court).
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Brésil

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 72
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par dorinf Voir le message
    Peut-être un timeout au niveau de la connexion alors. Et cela aurait d'ailleurs tout son sens.

    S'il y a un timeout disons de 10s et que ton timer s'exécute toutes les secondes, alors, dès que tu tentes une connexion et que le serveur est hors ligne, tu bloques le code de ton timer pendant ces 10s. Et comme le code est exécuté via un timer, si c'est un timer Winforms, alors tu bloques également le thread qui gère l'interface utilisateur, d'où le gel.

    2 possibilités donc :
    • Ou bien tu mets un timeout à la connexion très court ;
    • Ou bien tu utilises des appels asynchrones.


    Dans un premier temps, pour vérifier si le soucis c'est bien ça, je testerai via le premier point. Pour une solution sur le long terme, j'emploierai la solution numéro deux (car ce n'est pas jamais une bonne idée de bloquer le thread qui gère l'UI, même pendant un temps très court).
    Votre réponse pourrait résoudre mon problème.
    Mais c'est la configuration qui doit être bien précise.
    J'ai mis un Timer.Stop() au debut du catch et j'ai mis un Timer.Start() à la fin du catch.
    Des appels asynchrones c'est à dire ?

  7. #7
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Les méthodes asynchrones se terminent par convention par Async. Tu peux alors utiliser des mots clés comme await/async pour faire des appels qui ne seront pas bloquant.

    Un petit lien sur la MSDN : https://msdn.microsoft.com/fr-fr/library/hh191443.aspx
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/11/2011, 12h26
  2. base de données plantée
    Par @rkane dans le forum Modélisation
    Réponses: 2
    Dernier message: 28/03/2011, 19h25
  3. Réponses: 10
    Dernier message: 17/03/2011, 09h06
  4. Déconnexion à la base de données
    Par Thibducas dans le forum JOnAS
    Réponses: 5
    Dernier message: 29/09/2010, 11h00
  5. [A-02] ma base de donnée plante
    Par xycoco dans le forum IHM
    Réponses: 4
    Dernier message: 26/11/2008, 10h49

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