Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ajout des donner WinForm sur une basse de donner

Sujet résolu
Anonyme
    8 octobre 2020 à 19:59:07

    Bonjour, j'ai une basse de donner un SQL et  j'aimerais savoir comment puis-je ajouter des donner dans la basse, mon application est faite avec win form et j'utilise un datagridview pour afficher les information dans la basse de donner, j'ai crée les champ de texte nécessaire pour que la personne ajoute ses information mais je ne sais pas comment les mettre après dans la basse de donner... 

    Merci pour votre aide

    • Partager sur Facebook
    • Partager sur Twitter
      8 octobre 2020 à 20:06:35

      Bonjour,

      Manque de précisions

      Vous êtes ici sur un forum d'entraide communautaire et non pas sur un forum de demande de service, le but n'est donc pas de fournir une réponse toute faite ou de directement fournir la solution à quiconque viendrait sans la moindre trace. Afin d'obtenir de l'aide et une solution à votre problème, il est fortement recommandé de présenter clairement l'état actuel du problème en nous fournissant :

      • Un descriptif clair et précis du problème
      • La tentative actuelle de résolution que vous avez effectué (le code)
      • Le résultat attendu et le résultat actuel
      • Toutes pistes de recherches pouvant aider à la résolution

      Déplacement vers un forum plus approprié

      Le sujet est déplacé de la section Base de données vers la section Langages.NET

      -
      Edité par Benzouye 8 octobre 2020 à 20:07:06

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        8 octobre 2020 à 20:14:46

        Le plus simple mais pas le plus polyvalent, c'est d'utiliser des DataAdapter d'ADO.NET pour faire la synchronisation entre vos données et la base de données.

        Pour une application sans intelligence (scaffolding), ça devrait largement suffire.

        Mais comme normalement vous avez dû déjà utiliser ça pour charger les données, j'ai peur que vous ayez utilisé ces cochonneries de DataReader.

        • Partager sur Facebook
        • Partager sur Twitter
        Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        Anonyme
          9 octobre 2020 à 18:31:41

          Se que j'ai esseyer pour mettre des donner dans la basse de donner c'est se code:

          private void btnAddClient_Click(object sender, EventArgs e)
          
                  {
          
                      SqlConnection con = new SqlConnection(@"Data Source = NCD-PC; Initial Catalog = ResidencePhilippe; Integrated Security = True");
          
                      con.Open();
          
                      SqlCommand cmd = con.CreateCommand();
          
                      cmd.CommandType = CommandType.Text;
          
                      cmd.CommandText = "insert into dbo.tblClients values('" + tbxCodePostal.Text + "','" + tbxMail.Text + "','" + tbxNumero.Text + "','" + tbxPays.Text + "','" + tbxPrenom.Text + "','" + tbxRue.Text + "','" + tbxTelephone.Text + "','" + tbxVille.Text + "')";
          
                      cmd.ExecuteNonQuery();
          
                      con.Close();
          
                      MessageBox.Show("Ca a marcher");
          
                  }

          Mais la commande   cmd.ExecuteNonQuery(); me donne une erreur (System.Data.SqlClient.SqlException : 'Le nom ou le numéro de colonne des valeurs fournies ne correspond pas à la définition de la table.')

          Pour se qui est du affichage j'ai remarquer que sur le data greed view il y avait un petit carré qui me m'as permis de selectionner ma basse de donner et afficher les donné.

          Il y a se code qui a etait generer automatiquement          

          SqlConnection con = new SqlConnection(@"Data Source = NCD-PC; Initial Catalog = ResidencePhilippe; Integrated Security = True");
          
                      SqlCommand cmd = new SqlCommand("Select * from tblClients", con);
          
                      DataTable dt = new DataTable();
          
                      con.Open();
          
                      SqlDataReader sdr = cmd.ExecuteReader();
          
                      dt.Load(sdr);
          
                      con.Close();
          
                      ClientRecordDataGridView.DataSource = dt;

          Jusqu'a maintenant j'ai suivi bcp de tuto sur yt mais ils sont vieux 4-5ans... donc je sais pas si les methode utiliser avant marche tj, en tous cas quand je les esseye elles ne marche pas. j'esseye de trouver tout sorte de reponse qui puisse m'aider a avancé mais j'ai rien pu trouver pour l'instant. Dsl d'avance pour l'orthographe mais je suis pas encore un AS pour ecrire en francais, surtout que je trouve que la langue et compliquer a ecrire pour un non francais ^^

          Pour se qui est du DataReader j'en ai effectivement utiliser pour faire marcher le login voici le code:

          private void btnLogin_Click(object sender, EventArgs e)
          
                  {
          
                      con.Open();
          
                      com.Connection = con;
          
                      com.CommandText = "select * from tblLogin";
          
                      SqlDataReader dr = com.ExecuteReader();
          
                      if (dr.Read())
          
                      {
          
                          if (tbxUsername.Text.Equals(dr["UserName"].ToString()) && tbxPassword.Text.Equals(dr["Password"].ToString()))
          
                          {
          
                              FormMainMenu FormMainMenu = new FormMainMenu();
          
                              FormMainMenu.Size = new System.Drawing.Size(1901, 920);
          
                              FormMainMenu.Show();
          
                              this.Hide();
          
                          }
          
                          else
          
                          {
          
                              FormWrongMDPandUsername FormWrongMDPandUsername = new FormWrongMDPandUsername();
          
                              FormWrongMDPandUsername.Size = new System.Drawing.Size(749, 467);
          
                              FormWrongMDPandUsername.Show();
          
                              this.Hide();
          
                          }
          
                      }
          
                      con.Close();
          
                  }

          apres j'ai egalement esseye se code pour ajouter des information dans ma base client :

           private void btnAddClient_Click(object sender, EventArgs e)
          
                  {
          
                      try
          
                      {
          
                          //This is my connection string i have assigned the database file address path  
          
                          string MyConnection2 = "Data Source = NCD-PC; Initial Catalog = ResidencePhilippe; Integrated Security = True";
          
                          //This is my insert query in which i am taking input from the user through windows forms  
          
                          string Query = "insert into dbo.tblClients(Nom,Prenom,Rue,Numero,Ville,NPA,Pays,Mail,Telephone) values('" + this.tbxNom.Text + "','" + this.tbxPrenom.Text + "','" + this.tbxRue.Text + "','" + this.tbxNumero.Text + "','" + this.tbxVille .Text + "','" + this.tbxCodePostal.Text + "','" + this.tbxPays.Text + "','" + this.tbxMail.Text + "','" + this.tbxTelephone.Text + "');";
          
                          //This is  MySqlConnection here i have created the object and pass my connection string.  
          
                          SqlConnection MyConn2 = new SqlConnection(MyConnection2);
          
                          //This is command class which will handle the query and connection object.  
          
                          SqlCommand MyCommand2 = new SqlCommand(Query, MyConn2);
          
                          SqlDataReader MyReader2;
          
                          MyConn2.Open();
          
                          MyReader2 = MyCommand2.ExecuteReader();     // Here our query will be executed and data saved into the database.  
          
                          MessageBox.Show("Save Data");
          
                          while (MyReader2.Read())
          
                          {
          
                          }
          
                          MyConn2.Close();
          
                      }
          
                      catch (Exception ex)
          
                      {
          
                          MessageBox.Show(ex.Message);
          
                      }
          
                  }



          Se qui ajoute des clients a ma base de donner mais avec ce code j ai une autre problème, se que je met n'est pas afficher dans l'application, je dois changer d'onglet et revenir pour que les information se mettent a jours

          -
          Edité par Anonyme 9 octobre 2020 à 20:18:24

          • Partager sur Facebook
          • Partager sur Twitter
            9 octobre 2020 à 20:09:47

            Bonjour,

            Merci de colorer votre code à l'aide du bouton Code

            Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Code de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: vb;">Votre code ici</pre>.

            Merci de modifier votre message d'origine en fonction.

            • Partager sur Facebook
            • Partager sur Twitter
            Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            Anonyme
              9 octobre 2020 à 20:16:18

              Benzouye a écrit:

              merci pour l'astuce, c'est vrai que c est bcp bcp plus visible et agreable a lire

              • Partager sur Facebook
              • Partager sur Twitter
                12 octobre 2020 à 11:43:43

                Ok, vous êtes dans le cas typique de l'usage des DataReader et de beaucoup de leurs inconvénients.

                Les DataReader étaient le premier essai de couche d'accès aux données de .NET, en droite lignée des technologies vieillissantes antérieures à .NET.

                Cela avait l'avantage de ne pas dépayser les programmeurs de l'époque mais étaient effroyablement complexe pour en faire un truc fiable malgré son apparente facilité.

                Je vais être assez dur avec ces machins mais ne le prenez pas personnellement. Ce que vous avez fait, avec tous ses défauts, c'est directement dû à ces DataReader et à la manière dont on s'en servait au début des années 2000.

                Faites attention à la 'fraîcheur" des choses que vous trouvez sur Internet. ;)

                Après ces DataReader de .NET 1.0 (dans ADO.NET), M$ a intégré les DataSet et les DataAdapter au Framework .NET 1.1 qui éliminent beaucoup des défauts des DataReader (avec aussi l'aide des concepts .NET que les DataReader n'utilisaient pas ou mal (c'est une repompe de technologies antérieures à .NET)).

                Les DataReader étant extrêmement casse-gueule à utiliser correctement mais peu exigeants en terme de dépendance, il est donc assez logique que les générateurs de code l'utilisent encore : ils peuvent mettre la plâtré de code qu'il faut pour "fiabiliser" le code sans erreur d'étourderie et ne sont utilisables que dans des cas "triviaux". Ne vous servez pas du code généré par les "Designer Graphique" comme exemple de "bon" code, SVP.

                J'espère que c'est un vieux "Designer Graphique" qui a généré le code que vous nous avez posté car, même s'il n'est pas "horrible", est quand même assez limitatif et assez peu flexible aux changements, de la base de donnée notamment. Il utilise quand même une DataTable du Framework NET 1.1 qui limite beaucoup de problèmes mais j'ai du mal à comprendre pourquoi il n'a pas fait une transition total vers les DataAdapter/DataSet (pas forcer la main vers les DataSet juste vers les DataTable ???).

                En ce qui concerne votre méthode "btnAddClient_Click premier code", elle a tous les défauts habituels du code fait à la truelle avec DataReader (Code à la truelle qu'on voyait partout dans les Tutoriels de l'époque (2001~2005) ): vulnérabilité aux attaques par SQL Injection (toujours faire des requêtes préparées et pas à base de concaténation de chaînes toutes moisies), les paires d'instruction "Open/Close" non blindé contre les exceptions (l'instruction using est notre amie), gestion inutilement lourde des états de la connexion, etc...

                Toutes ces remarques le sont aussi pour "btnAddClient_Click dernier code" mais l'erreur de requête SQL en moins. Il y a juste une grosse erreur en plus dans "btnAddClient_Click dernier code", c'est que vous utilisez "ExecuteReader()" à la place de "ExecuteNonQuery()", erreur que vous ne faites pas dans "btnAddClient_Click premier code". Quand on fait une commande SQL d'insertion, il n'y pas de "RecordSet/lignes de résultats" en retour donc le DataReader n'a rien à "lire" en réponse.

                Donc, pour votre méthode "btnAddClient_Click premier code", c'est juste une grossière erreur SQL, très courante quand on n'utilise pas de requêtes préparées. En utilisant des requêtes préparées et/ou DataSet/DataAdapter à la place de cette horreur de concaténation de chaine + DataReader vous ferez beaucoup moins d'erreurs de ce type et le résultat sera bien plus fiable (typage renforcé, code de la requête plus lisible, blindage contre les SQL Injection, ....). Pour le coup, je trouve le message d'erreur assez explicite.

                Faites aussi attention à vos requêtes SQL car l'utilisation de "*" à la place des noms des noms de colonnes annihile tout évolutivité/découplage couche applicatif/couche données. Les technologies plus évoluées comme les ORM permettent de facilement éviter ces "boulettes".

                Pour ce qui est du code généré par le "Designer Graphique", cf. mes remarques ci-avant sur la qualité assez douteuse de ce code et de son manque de "souplesse".

                Les DataSet/DataAdapter ou les ORM .NET sont bien plus vieux que "4-5ans", je pense que vous êtes la victime des algorithmes "Google" qui ont tendance à mettre en avant toujours les mêmes "conneries" car, lors de leur "sortie", il n'y avait pas beaucoup de ressources de qualité et que beaucoup d'autres n'ont fait que re-pomper sans aucun recule.

                Recherchez spécifiquement les DataAdapter ou les ORM .NET (Entity Framework, NHibernate, etc...), vous permettra de passer outre la bulle de désinformation de notre ami Google.

                Les technologies n'arrêtent pas de fonctionner sans criée gare, il y a beaucoup plus de chance que vous les appliquiez mal qu'elles n'aient cessées de fonctionner. Donc, pensez à demander de l'aide, ici ou ailleurs, dans ces cas-là.

                "btnLogin_Click", j'espère que c'est juste pour "le fun" car c'est une ignominie d'un point de vue sécurité informatique. Utilisez les frameworks d'authentification et d'autorisation dédiés, c'est pas ça qui manque, et ne réinventer par une roue carrée (et qui fuit des informations sensibles par tous les pores, attention, légalement, c'est vous le responsable des données qu'on vous confie).

                Faire des choses correctement avec les DataReader est beaucoup beaucoup plus compliqué qu'avec les DataSet/DataAdapter et les choses qui vous manquent pour compléter votre travail sont triviales avec ces outils plus modernes et polyvalents : DataSet/DataAdapter ou des ORM.

                Cela demandera peut-être plus de travail que de continuer en Full DataReader, mais dans ce cas de Full DataReader : la maintenance de votre projet sera une horreur et vous ne bénéficierez pas des outils performants pour vos prochains projets.

                • Partager sur Facebook
                • Partager sur Twitter
                Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                  12 octobre 2020 à 16:42:08

                  Quand tu insères une ligne dans une base de données via une requête SQL, il faut soit préciser  les colonnes et les valeurs correspondantes

                  INSERT INTO table(col1, col2, col3,...) VALUES (val_col1,val_col2, val_col3,...) (comme tu le fait dans ton 4ème code)

                  soit si on n'indique pas les colonnes, il faut entrer les valeurs dans l'ordre établie lors de la création de la table (ce que tu ne fait visiblement pas dans ton 1er code, ce qui entraine l'erreur vue)

                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 octobre 2020 à 17:00:52

                    Et tous ces détails et chausses-trappes que mentionne @umfred disparaissent en utilisant correctement les outils comme les DataAdapter.

                    https://docs.microsoft.com/fr-fr/dotnet/framework/data/adonet/updating-data-sources-with-dataadapters

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

                    Ajout des donner WinForm sur une basse de donner

                    × 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