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

 

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    juillet 2005
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : juillet 2005
    Messages : 581
    Points : 922
    Points
    922

    Par défaut Test d'une connexion à SQLServer

    Bonjour,

    J'essaie de faire une fonction qui teste la connexion à SQLServer. Cette fonction est lancé dans un thread.
    - Si je débranche mon pc du réseau et que je lance l'appli, la fonction détecte bien que la base n'est pas disponible.
    - Si je lance l'appli alors que mon pc est connecté au réseau, la fonction détecte bien que la base est disponible, mais ne détecte plus la déconnexion lorsque je déconnecte le pc du réseau pendant que l'appli tourne.

    Je ne sais pas si c'est la bonne méthode pour faire ca...visiblement non

    Est-ce que quelqu'un aurait une idée svp ?


    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
            private void TestServeur()
            {
                coupureReseau = false;
     
                Log.LogInformation("Test Serveur lancé");
     
                //string srvConnectionString = ConfigurationManager.ConnectionStrings["Serveur"].ConnectionString;
                SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(this.serveurConnectionString);
                string datasource = builder.DataSource;
     
                while (!this.arreterPing)
                {
                    try
                    {
                        Log.LogInformation($"Test de connexion à la base de données {datasource}...");
                        using (SqlConnection s = new SqlConnection(this.serveurConnectionString))
                        {
                            s.Open();
                        }
     
                        Log.LogInformation($"Connexion à la base de donnée {datasource} réussie");
     
                        if (coupureReseau)
                        {
                            // Le reseau est revenu
                            Log.LogInformation($"La base de données {datasource} est de nouveau disponible. ");
     
                            // Synchronisation des tables en attente dans la table DBSync :
                            //this.SynchroAttente();
                            this.Synchro();
                        }
                        coupureReseau = false;
     
                    }
                    catch (SqlException e)
                    {
                        Log.LogErreur($"Base de données {datasource} indisponible");
                        coupureReseau = true;
                    }
                    Thread.Sleep(1000); // Délai d'une seconde
                }
            }

  2. #2
    Membre confirmé Avatar de Flow_75
    Homme Profil pro
    Ingénieur
    Inscrit en
    mai 2005
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Transports

    Informations forums :
    Inscription : mai 2005
    Messages : 947
    Points : 640
    Points
    640

    Par défaut

    Bonjour,

    J'ai le exactement le même problème avec ce code suivant :

    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
            public bool Executer()
            {
     
                string cs = string.Format("Driver={{SQL Server}};Server={0};UID={1};PWD={2};Database={3}", Serveur, User, Password, Base);
                OdbcConnection connexion = new OdbcConnection(cs);
                {
                    try
                    {
                        connexion.ConnectionTimeout = 10;
                        connexion.Open();
     
                        if(connexion.State == System.Data.ConnectionState.Open)
                        {
                            connexion.Close();
                            connexion.Dispose();
                            connexion = null;
                            return true;
                        }
                    }
     
                    catch(Exception e)
                    {
                        connexion.Dispose();
                        connexion.Close();
                        connexion = null;
                        return false;
                    }
     
                }
     
                return true;
     
            }

  3. #3
    Responsable .NET & Magazine

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

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

    Informations forums :
    Inscription : juillet 2016
    Messages : 2 325
    Points : 9 327
    Points
    9 327
    Billets dans le blog
    21

    Par défaut

    Bonjour,

    Que signifie exactement "la fonction détecte bien que la base est/n'est pas disponible." ?

    est-ce par rapport aux logs ? ou est-ce par rapport à la valeur de la variable coupureReseau ?

    Si c'est par rapport à la valeur de la variable coupureReseau, est-elle déclarée comme étant volatile ?

    Avez vous essayer de déboguage pas-à-pas ? Par exemple, en mettant des points d'arrêt en début de boucle, pour vérifier que la tâche tourne bien ?
    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

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    juillet 2005
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : juillet 2005
    Messages : 581
    Points : 922
    Points
    922

    Par défaut

    Salut,

    Que signifie exactement "la fonction détecte bien que la base est/n'est pas disponible." ?

    est-ce par rapport aux logs ? ou est-ce par rapport à la valeur de la variable coupureReseau ?
    Non, quand je dis qu'elle ne détecte pas que la base est/n'est pas disponible c'est que ca ne passe pas dans le catch si je débranche le réseau....
    En débogage pas à pas je vois qu'il passe bien sur la ligne s.open() mais ca ne va pas dans le catch...
    Ce qui est bizarre c'est que si je lance l'application alors que l'ordi est déja débranché alors là il passe bien dans le catch... J'ai du louper un truc mais je ne sais pas trop quoi...

    Si c'est par rapport à la valeur de la variable coupureReseau, est-elle déclarée comme étant volatile ?
    La variable coupureReseau est une variable d'instance (j'aurais du mettre this. pour que ce soit plus clair). Par contre je ne l'ai pas déclaré en volatile... je ne sais pas trop ce que c'est je vais demander à Google...

  5. #5
    Responsable .NET & Magazine

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

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

    Informations forums :
    Inscription : juillet 2016
    Messages : 2 325
    Points : 9 327
    Points
    9 327
    Billets dans le blog
    21

    Par défaut

    D'accord, je vois mieux le soucis.

    La nuit portant conseil... je vous conseille de désactiver le pooling en ajoutant un "Pooling=False" à votre chaîne de connexion.

    Le pooling est un mécanisme permettant d'optimiser la création de nouvelles connexions à une base de données en favorisant la réutilisation de connexions inutilisées plutôt que la création complète à chaque fois. En effet, la création complète d'une connexion est une étape lourde, et il est bien plus avantageux à la fermeture d'une connexion de la mettre de côté et de la réutiliser dès qu'une nouvelle connexion est demandée plutôt que de la détruire complètement et d'en recréer une nouvelle from scratch.

    Comme le pooling est un mécanisme par défaut de la couche ADO.Net, il doit donc être désactivé explicitement.
    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 éprouvé
    Profil pro
    Inscrit en
    juillet 2005
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : juillet 2005
    Messages : 581
    Points : 922
    Points
    922

    Par défaut

    Ah cool !
    Merci beaucoup pour le conseil... Je vais tester ca...

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    juillet 2005
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : juillet 2005
    Messages : 581
    Points : 922
    Points
    922

    Par défaut

    Bon effectivement, c'était bien ca...

    Merci beaucoup !

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

Discussions similaires

  1. Outil de test d'une connexion HTTPS
    Par tafkap dans le forum Sécurité
    Réponses: 1
    Dernier message: 04/11/2016, 19h00
  2. error de test pour une connexion OBDC
    Par PROGDEV2paris dans le forum JDBC
    Réponses: 3
    Dernier message: 13/07/2008, 21h44
  3. pb avec une connexion à SQLServer
    Par metaltouch dans le forum Général Dotnet
    Réponses: 6
    Dernier message: 08/08/2007, 22h25
  4. [C#] Teste d'une connexion à une DB
    Par Goldenkiller dans le forum Accès aux données
    Réponses: 6
    Dernier message: 09/01/2007, 08h38
  5. L'utilisateur n'est pas asoocié à une connexion SQLServer...
    Par NotANumber dans le forum MS SQL-Server
    Réponses: 5
    Dernier message: 27/01/2006, 15h27

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