Partage
  • Partager sur Facebook
  • Partager sur Twitter

Connexion Sql serveur

    31 janvier 2023 à 8:53:06

    Bonjour,

    J'ai besoin de votre aide car je bute sur un sujet qui semble facile, mais après un an de non développement, je sèche :(

    Je souhaite faire une connexion de base de donnée sql server sur un projet WPF.

    Mes identifiants de connexion se trouve dans un fichier XML. Je récupère ces informations via un code puis j'essaye de les reprendre en variable pour me connecter aux bases de données.  :

    Le soucis, c'est que lorsque je met met les variable sur ce morceau de code : 

     public class DataManager
        {
        
    
            #region Instance
    
            static readonly DataManager m_Instance = new DataManager();
    
            public static DataManager Instance
            {
                get { return m_Instance; }
            }
    
            #endregion
    
    
    
            string m_Source;
            public string Source
            {
                get { return m_Source; }
                set { m_Source = value; }
            }
    
            string m_User;
    
            public string User
            {
                set { m_User = value; }
            }
    
    
    
            string m_Password;
            public string Password
            {
                set { m_Password = value; }
            }
    
    
    
    
            
             SqlConnection oConnection = new SqlConnection("server=" + m_Source + "; database=DATABASE_TEST; UID =" + m_User + "; password =" + m_Password);
    
    }
    
    
    



    J'obtiens comme quoi la variable m_Source etc... n'a pas de valeur null ici

    Par contre quand je met toute les données en brut, tout fonctionne parfaitement bien

    Ne me jugez pas, je suis sur c'est pas grand chose ! :(

    -
    Edité par Xerationne 31 janvier 2023 à 8:56:54

    • Partager sur Facebook
    • Partager sur Twitter
      31 janvier 2023 à 9:10:19

      Il est censé être initialisé où et quand le champ d'instance m_Source ?

      Je suis même assez étonné que cela compile. Ça ressemble à une implémentation du Design Pattern "Singleton" un peu bâclé.

      Généralement, tous les "détails" d'un Design Pattern sont importants.

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        31 janvier 2023 à 9:21:02

        J'ai un code dans une autre page qui parcours le fichier XML en question :

         public bool Parse(string fileName)
            {
                try
                {
                    doc.Load(@fileName);
        
                    XmlNodeList nodeList = doc.GetElementsByTagName("DataBase"); // On se place sur le premier noeud
        
                    foreach (XmlNode dbNode in nodeList)
                    {
                            foreach (XmlNode paramsNode in dbNode.ChildNodes)
                            {
                                switch (paramsNode.Name)
                                {
                                        case "Source":
                                        DataManager.Instance.Source = paramsNode.Attributes["value"].Value;
                                        break;
                                        case "User":
                                        DataManager.Instance.User = paramsNode.Attributes["value"].Value;
                                        break;
                                        case "Password":
                                        DataManager.Instance.Password = paramsNode.Attributes["value"].Value;
                                        break;
                                }
                            }
                            break;
                        
                    }
        
                    return true;
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message + "\nVeuillez contacter un administrateur.", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
        
                    // On l'enregistre dans le fichier log d'erreurs
                    StreamWriter streamWriter = new StreamWriter("Errors.txt");
                    streamWriter.WriteLine(e.Message.ToString());
                    streamWriter.WriteLine(e.ToString());
                    streamWriter.Close();
        
                    return false;
                }
            }



        • Partager sur Facebook
        • Partager sur Twitter
          31 janvier 2023 à 9:29:40

          Qu'est-ce qui garantit que le code de "Parse" est exécuté avant la ligne 44 de votre fichier DataManager.cs ?

          Je ne suis pas fan des constructeurs implicites, donc je connais même pas la réponse à cette question.

          P.S.: de mon temps, il y avait un type connexion dans les fichiers de paramétrage des application, avec un Designer dédié.

          -
          Edité par bacelar 31 janvier 2023 à 9:31:02

          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
            31 janvier 2023 à 9:44:31

            Dans mon formulaire WPF :

              public Form_connexion()
                    {
                        InitializeComponent();
            
                        DataParameters baseParams = new DataParameters();
                        baseParams.Parse(Application.StartupPath + "\\DataBase.xml");
                      
            
            
                        string requete = "SELECT Login_user FROM Users";
            
                        TableRequete = DataManager.Instance.GetTable(requete);
                        //Insertion des données de la requête dans le comboBox Type
                        foreach (DataRow row in TableRequete.Rows)
                        {
                            this.CCBox_login.Items.Add(row[0].ToString());
            
                        }
            
            
                    }

            Les deux premieres lignes récupères les données

            • Partager sur Facebook
            • Partager sur Twitter
              31 janvier 2023 à 9:59:06

              Qu'est-ce qui garantit que le code de "Form_connexion" est exécuté avant la ligne 44 de votre fichier DataManager.cs ?

              Ça peut durer longtemps comme ça.

              Si vous êtes en train d'apprendre à la dur comment on implémente un Design Pattern type Singleton, je pense que vous n'avez pas encore les bases.

              J'ai vraiment l'impression que vous réinventez l'eau tiède.

              Pourquoi ne pas passer par le Designer, et en plus il devrait mieux gérer le chiffrement de ces données sensibles que votre implémentation naïve laisse trainer.

              • Partager sur Facebook
              • Partager sur Twitter
              Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                31 janvier 2023 à 12:57:15

                Si tu débogues en pas à pas, tu trouveras peut-être la raison :-°
                • Partager sur Facebook
                • Partager sur Twitter
                  31 janvier 2023 à 13:59:23

                  Malheureusement non, ma question portait surtout sur pourquoi quand j'écris en brut, tout passe bien, par contre quand je mets une variable "la variable m_Source n'a pas de valeur null ici" c'est peut être juste un cas d'école
                  • Partager sur Facebook
                  • Partager sur Twitter
                    31 janvier 2023 à 14:41:38

                    C'est quoi votre "en brut" ?

                    Si vous faites tout dans une seul fonction, vous maîtrisez l'ordre d'exécution du code.

                    Ici, dans votre machin, vous ne maîtrisez pas l'ordre d'exécution de votre bidule.

                    -
                    Edité par bacelar 31 janvier 2023 à 17:45:25

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                      31 janvier 2023 à 17:21:14

                      Si je met les identifiants en brut dans le code, sans passer par des variables.

                      Et non tout n'est pas dans une seule fonction, il s'agit d'un code que j'ai récupéré que j'essaye de comprendre. 

                      • Partager sur Facebook
                      • Partager sur Twitter
                        31 janvier 2023 à 17:53:28

                        >Si je met les identifiants en brut dans le code, sans passer par des variables.

                        Donc dans une fonction.

                        "Main", c'est aussi une fonction/méthode.

                        Je pense que vous avez très très mal "recopié" le code.

                        Si votre ligne 44 n'était pas "dans le vide" mais dans un constructeur et que ce constructeur aient correctement initialisé les propriétés utilisées dans votre ligne 44, il n'y aurait aucun problème.

                        Il n'y a pas de magie. L'ordinateur ne fait que ce qui est indiqué.

                        Si les propriétés ne sont pas initialisées, elles ne sont pas initialisées, point barre.

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                          1 février 2023 à 12:13:17

                          pour moi, ça manque de mot-clé static par exemple 

                          et où est ton GetTable ? 

                          et je pense que les "erreurs" sont données avant compilation (ou pendant)

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Connexion Sql serveur

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown