Foreach insert into

boule118 - 11 mars 2013 à 12:13
 boule118 - 14 mars 2013 à 09:01
Bonjour à tous
Je débute mon apprentissage en programmation et voilà mon problème
je développe en c#
J'ai une interface avec une checklistbox avec des noms villes et une simple listbox avec les noms de produits et des textbox avec les quantités de produits commandés
j'ai aussi une base de donnée avec entre autres 2 tables (commande et lignes de commande)
j'essai d'écrire des requêtes qui me rajoute une ligne dans la table commande et autant de ligne que j'ai de noms de villes cochés dans ma checklistbox.

  private void btn_Voir_La_Cmd_Click(object sender, EventArgs e)
        {
            OleDbConnection cn = new OleDbConnection();
            cn.ConnectionString = (@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Sebastien\Documents\afficahge\afficahge\musicalsol.accdb;Persist Security Info=True;Jet OLEDB:Database Password=Admin");
            cn.Open();
            if (txtA3.Text !="")
            {
                listaffiches.SelectedItems.Add(0);//Pour selectionner l'item correspondant a la textbox (ça marche pas)
            }

 try
            {
 OleDbCommand cmd = new OleDbCommand();

                cmd.Connection = cn;

                cmd.CommandText = "insert into commandes (num_commande,date_de_commande,nom_adherent,montant) values('" + int.Parse(txtNumCmd.Text) + "','" +Convert.ToDateTime(txtDate.Text) + "','" +comboAdherent.SelectedItem+"','"+txtTotal.Text.ToString()+"')";
                cmd.ExecuteNonQuery();

foreach (string Item in checkedListVallelAude.CheckedItems)
                    {
                        
                        cmd.CommandText = "insert into lignes_de_commande ( num_commande,reference,commune) values('" + int.Parse(txtNumCmd.Text) + "','" + listaffiches.SelectedItems + "','" + checkedListVallelAude.SelectedItem + "')";
                    
                        cmd.ExecuteNonQuery();
 }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
                        
                    }


Ce code me renvoi l'erreur suivante sur la 2ème requete "La liste à laquelle cet énumérateur est lié a été modifié.Un énumerateur ne peut être utilisé que si la liste ne change pas".
Quelqu’un peut t-il m'aider à résoudre mon mes erreurs car à mes yeux la liste n'est pas modifier. et l'item devrait être sélectionné
Merci d'avance
Seb

6 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
11 mars 2013 à 13:57
Bonjour,

à première vue, tu fais un foreach avec item comme enumérateur, mais tu ne t'en sers pas.

En plus ta commande
cmd.CommandText = "insert into lignes_de_commande ( num_commande,reference,commune) values('" + int.Parse(txtNumCmd.Text) + "','" + listaffiches.SelectedItems + "','" + checkedListVallelAude.SelectedItem + "')";

fait apparaitre listaffiches.SelectedItemS, ça ne je pense pas que ça te sorte un string utile.

Whismeril
0
Merci pour ta réponse
j'ai refais le foreach de cette façon
 foreach (object itemChecked in checkedListVallelAude.CheckedItems)
                    {

                        cmd.CommandText = "insert into lignes_de_commande ( num_commande,reference,commune) values('" + int.Parse(txtNumCmd.Text) + "','" + listaffiches.SelectedItem + "','" + checkedListVallelAude.CheckedItems.ToString() + "')";
                    
                        cmd.ExecuteNonQuery();
                        
                    }

On dirait qu'il y a du mieux mais dans ma base de donnée a la place du nom de la ville j'ai ça qui s'affiche "System.Windows.Forms.CheckedListBox+CheckedItemCollection"
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
12 mars 2013 à 08:46
Bonjour, oui c'est ce que je voulais te dire, il faut que tu extrais l'item correspondant que tu le cast pour accéder à sa valeur.
Je n'ai pas VS sous la main mais certains contrôles ont une propriété selectedtext qui te serait peut être plus utile

Whismeril
0
foreach (string Item in checkedListVallelAude.CheckedItems)
                {

                    cmd.CommandText = "insert into lignes_de_commande ( num_commande,reference,commune) values(" + int.Parse(txtNumCmd.Text) + ",'" + listaffiches.SelectedItem + "','" + Item + "')";

                    cmd.ExecuteNonQuery();

ça marche presque
depuis ce matin je cherche, au passage du premier foreach le champs commune ce rempli avec TOUS les Item du checkbox si je choisi de cocher le 1er item de la liste.
Et au 2ème passage c'est bon il prend bien le bon item.
Si je ne choisi pas la première commune de la liste ça a l'air de marcher.

Je pense qu'il y a un détail qui m'échappe dans l'usage du foreach ? qu'en penses tu ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
13 mars 2013 à 15:44
Je suis surpris de ce code
string Item in checkedListVallelAude.CheckedItems

CheckedItems n'est pas (il me semble) une collection de string donc le fait que tu forces item a être un string est peut être l'origine de ton bug.
Je n'ai pas VS sous la main pour essayer.

Whismeril
0
foreach (string Item in checkedListVallelAude.CheckedItems)
                {

                    cmd.CommandText = "insert into lignes_de_commande ( num_commande,reference,commune) values(" + int.Parse(txtNumCmd.Text) + ",'" + listaffiches.SelectedItem + "','" + Item + "')";

                    cmd.ExecuteNonQuery();

                }

Merci pour ton aide et le temps passé. Je pense avoir réglé le problème(pour le moment) de cette façon
0
Rejoignez-nous