2 votes

Passage de variables par des événements c#

Je n'ai pas beaucoup d'expérience en C#, mais j'aime vraiment coder en C#, je pense que c'est un langage orienté objet très flexible et convivial.

Donc bien. J'essaie de faire passer des variables par des clics de bouton, afin de pouvoir faire une insertion dans une base de données avec les valeurs obtenues des clics de bouton. J'ai plusieurs boutons qui recyclent la valeur "produit" en une chaîne différente, dans une approche en langage naturel ce serait ça :

Si je clique sur un certain "produit", la variable produit obtiendra le nom du bouton, ensuite je clique sur le bouton "quantité" et cela me donnera le numéro de la quantité, ensuite le programme fera une insertion dans la base de données avec ces valeurs. Mais je ne sais pas comment recycler ces valeurs en fonction des boutons cliqués.

En bref, le code que j'ai est le suivant :

    private String product;
    private int quantity;
    private char prodchosen;
    private char quantitychosen;

    private void Product_Click(object sender, EventArgs e)
    {
      prodchosen = 'Y';
      product = "Beer";
    }

    private void Product2_Click(object sender, EventArgs e)
    {
      prodchosen = 'Y';
      product = "Juice";
    }

    public void bttn1_Click(object sender, EventArgs e)
    {
      quantitychosen = 'Y';
      quantity = 1;
      if (prodchosen == 'Y' && quanitychosen == 'Y')
      {
       MySqlConnection mcon = new MySqlConnection("server=localhost;database=***;username=root;password=***");
       mcon.Open();
       string insert = "INSERT INTO accounts product, quantity VALUES" + product + " , " + quantity;

       MySqlCommand cmd = new MySqlCommand(insert, mcon);
       MessageBox.Show("Product was succesfully added");
     }
     else {
       MessageBox.Show("Quantity and product not recognized");
     }

Après avoir été insérées dans la base de données, ces valeurs seront affichées dans une grille, l'instruction de sélection sera délimitée par une valeur selectedindex de combobox comme :

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
        clientchosen = 'Y';
        client_id = comboBox1.SelectedIndex;

        MySqlConnection mcon = new MySqlConnection("server=localhost;database=***;username=root;password=***");
        mcon.Open();

        char open = 'Y';

        int selectedIndex = comboBox1.SelectedIndex;
        Object selectedItem = comboBox1.SelectedItem;

        string select2 = "SELECT * FROM account where client_id = " + selectedIndex + " and open = " + open;

        MySqlCommand cmd2 = new MySqlCommand(select2, mcon);

        object result = cmd.ExecuteNonQuery();

    }

Jusqu'à présent, je n'ai pas été en mesure de réussir une insertion, pas même d'afficher la boîte de message, j'apprécierai beaucoup tout commentaire que vous avez sur ce problème.

2voto

Alastair Brown Points 1508

Je pense que votre SQL n'est pas tout à fait correct, les clauses columns et values ont besoin de parenthèses et la valeur string a besoin de guillemets. Essayez ceci :

string insert = "INSERT INTO accounts(product, quantity) " +
                "VALUES('" + product + "' , " + quantity + ")";

2voto

Mohamed Sheik M Points 92

Essayez avec ceci

SqlConnection dbconnect = new SqlConnection("server=localhost;database=***;username=root;password=***");
SqlCommand cmd;

    try
    {
        cmd = new SqlCommand("INSERT INTO accounts(product, quantity) VALUES(@prod, @quan)", dbconnect);
        cmd.Parameters.AddWithValue("@prod", Your_Text_Box.Text);
        cmd.Parameters.AddWithValue("@quan", Your_Text_Box.Text);
        dbconnect.Open();
    }

C'est la façon dont j'insère les valeurs dans la base de données. Cela fonctionne bien pour moi

0voto

njack Points 41

Modifié pour plus de détails après avoir lu d'autres réponses. Une requête paramétrée est une excellente idée. Cherchez à savoir pourquoi c'est le cas.

Votre SQL ne fonctionnera pas car il manque un espace après VALUES. Le paramètre produit qui le suit ne sera pas reconnu et votre insertion ne fonctionnera pas.

Vous n'exécutez jamais votre commande. Exécutez-la avec

cmd.ExecuteNonQuery();

N'hésitez pas à saisir la valeur de retour de l'instruction ci-dessus si vous le souhaitez - elle renverra le nombre de lignes concernées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X