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 :

Test d'une connexion à SQLServer


Sujet :

C#

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    690
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2005
    Messages : 690
    Points : 1 647
    Points
    1 647
    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
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    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
    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,

    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 expérimenté
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    690
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2005
    Messages : 690
    Points : 1 647
    Points
    1 647
    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
    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
    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 expérimenté
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    690
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2005
    Messages : 690
    Points : 1 647
    Points
    1 647
    Par défaut
    Ah cool !
    Merci beaucoup pour le conseil... Je vais tester ca...

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    690
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2005
    Messages : 690
    Points : 1 647
    Points
    1 647
    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