Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ajouter dans une BDD a partir d'une listview

Sujet résolu
    5 janvier 2019 à 0:17:56

    Ajouter dans une BDD a partir d'un élément sélectionné dans une listview

    Bonjour !

    J'ai créé une base de données et j'ai créé un logiciel avec c# afin de m'y connecté et d'interagir avec.

    J'ai créé une listview avec les éléments de ma base de données à l'intérieur, j'ai créé un bouton permettant d'ouvrir une nouvelle form afin d'ajouter une information en plus à un élément sélectionnée dans la listview.

    Par exemple la requête sql va prendre en compte l'élément selectionné mais aussi les éléments des textbox de la deuxième form.

    Pour être plus précis, Les éléments dans la listview sont des informations de véhicule(Marque, Modèle, Année, kilométrage, etc) lorsque que je clique sur un vehicule ça m'ouvre la deuxième form et à l'intérieur j'écris les coordonnées d'un client(nom, prenom, numero, adresse, date vente) ayant acheté le véhicule sélectionné auparavant.ce qui va faire que dans ma base de données le véhicule aura été acheté par le client.

    Mon problème c'est que la requête que j'ai créer fonctionne bien lorsque je la rentre sur mysql, c'est sur c# que ça ne fonctionne pas, ça doit être mon code qui n'est pas bon mais je ne sais pas comment faire, il ne prend pas en compte les informations sélectionnées dans ma listview. 

    Auriez-vous un idée?

    Merci.

    Voici mon code ainsi que ma listview:

    public partial class Ajouter_Vente : Form
        {
    
            private concession _concession;  public Ajouter_Vente(concession concession)
            {
                InitializeComponent();
                _concession = concession;
            }
    
            MySqlConnection connexion;
    
            private void bt_ajouter_Click(object sender, EventArgs e)
            {
                using (concession concession =new concession())
                connexion = new MySqlConnection("DATABASE=Concession; SERVER=localhost; user id=root; pwd=root");
                connexion.Open();
                if (_concession.lv_vehicule.SelectedItems.Count > 0)
                {
                    ListViewItem element = _concession.lv_vehicule.SelectedItems[0];
                    string Kilometrage = element.SubItems[7].Text;
                    string Date_CT = element.SubItems[8].Text;
                    string Option_Vehicule = element.SubItems[9].Text;
                    string Puissance_Fiscale = element.SubItems[10].Text;
    
                    MySqlCommand commande = new MySqlCommand("INSERT INTO client (Nom, Prenom, Adresse, Numero) VALUES (@Nom, @Prenom, @Adresse, @Numero); INSERT INTO Client_Stock_Vente (Id_Client, Id_Stock, Date_Vente) VALUES ((SELECT Id_Client FROM Client WHERE Nom = @Nom AND Prenom = @Prenom AND Adresse = @Adresse AND         numero = @Numero), (SELECT Id_Stock FROM Stock WHERE Kilometrage = @Kilometrage AND Date_CT = @Date_CT AND Option_Vehicule = @Option_Vehicule AND Puissance_Fiscale = @Puissance_Fiscale), @Date_Vente);", connexion);
    
                    commande.Parameters.AddWithValue("@Nom", tb_nom.Text);
                    commande.Parameters.AddWithValue("@Prenom", tb_prenom.Text);
                    commande.Parameters.AddWithValue("@Adresse", tb_adresse.Text);
                    commande.Parameters.AddWithValue("@Numero", tb_numero.Text);
                    commande.Parameters.AddWithValue("@Date_Vente", Convert.ToDateTime(tb_date_vente.Text).ToString("yyyy-MM-dd"));
    
                    commande.Parameters.AddWithValue("@Kilometrage", Kilometrage);
                    commande.Parameters.AddWithValue("@Date_CT", Date_CT);
                    commande.Parameters.AddWithValue("@Option_Vehicule", Option_Vehicule);
                    commande.Parameters.AddWithValue("@Puissance_Fiscale", Puissance_Fiscale);
    
                    
                    commande.ExecuteNonQuery();
                    commande.Parameters.Clear();
                    lb_vente.Text = "Vehciule vendu.";
                }
            }
        }





    -
    Edité par SeeZix 5 janvier 2019 à 0:18:14

    • Partager sur Facebook
    • Partager sur Twitter
      8 janvier 2019 à 11:16:24

      Votre "code" SQL est trop fragile.

      Faute de faire une procédure stockée, faites vos traitement par étapes.

      Rien ne garantit que le premier INSERT fonctionne ou que l'évaluateur de plan d'exécution ne change l'ordre d'évaluation entre les INSERT et les SELECT.

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        8 janvier 2019 à 13:58:03

        Mon premier insert fonctionne bien, il m'ajoute bien mon client, C'est au niveau du deuxième insert qu'il plante je pense.

        Erreur : 'Column 'Id_Stock' cannot be null'

        Il me dis que Id_Stock est null, comme ci il ne les prenait pas en compte dans la listview.

        • Partager sur Facebook
        • Partager sur Twitter
          9 janvier 2019 à 11:13:36

          J'insiste (très lourdement) sur le fait d'utiliser des procédures stockées pour avoir un code bien plus simple et flexible.

          Il y a tellement de motifs pour que cela ne fonctionne pas que je vais me concentrer que sur un seul.

          Le typage de vos requêtes est totalement à l'Ouest.

          vous collez tous dans des strings, quelques soit le type intrinsèque de la donnée.

          Comme le format des dates n'est pas une constante universelle, votre requête a de grosses chances d'échouer sur l'interprétation de la chaine "Date_CT".

          C'est déjà très bien d'avoir fait des requêtes paramétrées mais poussez le résonnement jusqu'au bout, en typant correctement vos paramètres.

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

          Ajouter dans une BDD a partir d'une listview

          × 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