Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur paramètre d'index

'InvalidArgument=La valeur '10' n'est pas valide pour 'index'.

    3 janvier 2019 à 20:37:03

    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 de modifier 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ément d'une textebox mais celle-ci se trouve sur la deuxième form.

    Le problème c'est que lorsque j'exécute le programme j'ai une erreur qui me parle d'index et je ne sais pas c'est quoi. Voici l'erreur :

    'InvalidArgument=La valeur '10' n'est pas valide pour 'index'.

    Nom du paramètre : index'

    Voici mon code :

    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();
                MySqlCommand commande = new MySqlCommand("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 Prix_Achat = @Prix_Achat AND Prix_Vente = @Prix_Vente AND Date_CT = @Date_CT AND Option_Vehicule = @Option AND Puissance_Fiscale = @Puissance_Fiscale), @Date_Vente)", connexion);
                
                ListViewItem element = _concession.lv_vehicule.SelectedItems[10];
                string Marque = element.SubItems[0].Text;
                string Modele = element.SubItems[1].Text;
                string Annee = element.SubItems[2].Text;
                string Porte = element.SubItems[3].Text;
                string Transmission = element.SubItems[4].Text;
                string Couleur = element.SubItems[5].Text;
                string Energie = element.SubItems[6].Text;
                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;
                commande.Parameters.AddWithValue("@Marque", Marque);
                commande.Parameters.AddWithValue("@Modele", Modele);
                commande.Parameters.AddWithValue("@Annee", Annee);
                commande.Parameters.AddWithValue("@Porte", Porte);
                commande.Parameters.AddWithValue("@Transmission", Transmission);
                commande.Parameters.AddWithValue("@Couleur", Couleur);
                commande.Parameters.AddWithValue("@Energie", Energie);
                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.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.ExecuteNonQuery();
                commande.Parameters.Clear();
    
            }
        }



    • Partager sur Facebook
    • Partager sur Twitter
      4 janvier 2019 à 9:26:19

      Bonjour,

      Je pense que le problème vient de là :

      ListViewItem element = _concession.lv_vehicule.SelectedItems[10];
      
      string Puissance_Fiscale = element.SubItems[10].Text;

      Ta liste contient 10 éléments, mais ta variable "Puissance_Fiscale" récupère la 11ème valeur, une liste commence à la valeur 0 donc si tu as 10 éléments, tu vas jusqu'à 9 ;)

      o/



      -
      Edité par Nairowyn 4 janvier 2019 à 9:27:43

      • Partager sur Facebook
      • Partager sur Twitter
      Insanity is doing the exact same fuckin' thing over and over again, expecting shit to change...
        4 janvier 2019 à 14:55:30

        Le problème d'index à été résolu, j'espère, quelqu'un m'a dit de faire ceci :

        ListViewItem element = _concession.lv_vehicule.SelectedItems[0];

        Il suffisait de remplacer le 10 par 0.

        Mais maintenant j'ai un autre problème avec ma requête sql, sauf que quand je rentre la requête sur ma base de données il n'y a aucun problème, seulement avec c#

        Erreur : 'Column 'Id_Stock' cannot be null'

        C'est comme ci la requête ne prenait pas en compte l'élément sélectionné dans la listview. Une idée ?

        Je remet le code légèrement modifié.

        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();
                    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);
                    
                    ListViewItem element = _concession.lv_vehicule.SelectedItems[0];
                    string Marque = element.SubItems[0].Text;
                    string Modele = element.SubItems[1].Text;
                    string Annee = element.SubItems[2].Text;
                    string Porte = element.SubItems[3].Text;
                    string Transmission = element.SubItems[4].Text;
                    string Couleur = element.SubItems[5].Text;
                    string Energie = element.SubItems[6].Text;
                    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;
                    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.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.ExecuteNonQuery();
                    commande.Parameters.Clear();
        
                }
            }





        • Partager sur Facebook
        • Partager sur Twitter
          4 janvier 2019 à 15:43:29

          Salut,

          Tu devrais espacer ta requête sur plusieurs lignes, c'est très pénible à lire.

          Sinon, je ne crois pas que tu puisses utiliser plusieurs requêtes SELECT dans un INSERT ( je me trompe peut-être).

          En effet tu devrais plutot utiliser une seule et même requête avec des jointures, car là dans ton INSERT le compilateur SQL ne saura pas quelle valeur de client va avec quelle valeur de stock, etc...

          Je te renvoie vers un post qui a l'air pas trop mal à ce sujet : https://www.developpez.net/forums/d6128/bases-donnees/firebird/sql/insert-select-insert-select-imbrique/

          • Partager sur Facebook
          • Partager sur Twitter
            4 janvier 2019 à 17:36:00

            La requête 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
            • Partager sur Facebook
            • Partager sur Twitter
              7 janvier 2019 à 9:25:25

              Est-ce que tu peux passer par les variables locales en debug et récupérer la requête SQL une fois qu'elle est construite avec tous les paramètres puis la tester sur ton mysql ?

              SeeZix a écrit:

              il ne prend pas en compte les informations sélectionnées dans ma listview


              Tu as vérifié que ta liste ou tes variables étaient bien remplies avec les données que tu souhaites ?

              o/

              • Partager sur Facebook
              • Partager sur Twitter
              Insanity is doing the exact same fuckin' thing over and over again, expecting shit to change...

              Erreur paramètre d'index

              × 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