【问题标题】:Passing variables through events c#通过事件传递变量c#
【发布时间】:2016-05-25 04:14:32
【问题描述】:

对不起,如果这看起来有点像菜鸟:3 ...我在 C# 方面没有太多经验,但我真的很喜欢用 C# 编写代码,我认为它是一种非常灵活和友好的面向对象语言。

那么好。 我试图通过按钮点击传递变量,以便能够使用按钮点击获得的值插入数据库。我有几个按钮将“产品”值回收到不同的字符串,在自然语言方法中,这将是:

如果我单击某个“产品”,变量产品将获得按钮的名称,然后我将单击“数量”按钮,这将给我数量编号,然后程序将插入具有这些值的数据库。但我怀疑如何根据单击的按钮回收这些值。

简而言之,我的代码如下:

    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");
     }

插入数据库后,这些值将显示在gridview中,select语句将由组合框selectedindex值分隔,如:

    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();

    }

到目前为止,我无法成功插入,甚至无法显示消息框,我将非常感谢您对此问题的任何 cmet。

【问题讨论】:

  • 插入查询错误...使用 INSERT INTO table_name VALUES (value1,value2,value3,...);
  • 调试时会发生什么?是否有错误,我的意思是你的sql语句在值周围缺少“(”和“)”
  • @DDave 插入很好。如果您不向每一列插入数据,则必须指定列名。添加括号会更容易阅读。

标签: c# database visual-studio variables events


【解决方案1】:

试试这个

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();
    }

这就是我将值插入数据库的方式。效果很好,对我有好处

【讨论】:

  • 我建议对您正在做什么/建议添加一些解释?
  • @Njack 我们可以做到。这是我们获得结果的方式。我通常更喜欢这样。检查数据是否插入。在左上角,我们将得到“1”,它表示。数据已插入
  • 我猜 OP 有 winform/wpf 应用程序,Response.Write 在这种情况下可能无效。
  • @Hari 是的,你是对的。我解释了 Web 应用程序的概念。
  • 也提供一个解释,你参数化了查询,这是正确的做法,所以包括这些点,让 OP 知道什么是正确的,什么不是。
【解决方案2】:

我认为您的 SQL 不太正确,列和值子句需要括号,字符串值需要引号。试试这个:

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

【讨论】:

  • Product 可能是一个数字,尽管它是一个字符串变量并且不需要括号。不过我同意,产品可能需要撇号。
【解决方案3】:

在阅读其他答案后进行了编辑以进行更多详细说明。参数化查询是个好主意。看看为什么会这样。

您的 SQL 不起作用,因为您在 VALUES 之后缺少一个空格。之后的产品参数将无法识别,您的插入将不起作用。

你永远不会执行你的命令。用

执行它
cmd.ExecuteNonQuery();

如果您愿意,请随意从上述语句中获取返回值 - 它会返回受影响的行数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    • 2011-10-19
    相关资源
    最近更新 更多