mysql更新datagrid中的整列

ejk8hzay  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(372)

我试图用一个按钮来更新我的商店库存水平,当这个按钮被按下时,我想所有的数量都要增加文本框中的数量,我有一个去实现一些代码来做到这一点,但它总是击中数据不插入的信息。。。

using System;
 using System.Data;
 using System.Windows.Forms;
 using MySql.Data.MySqlClient;

 namespace Aliena_Store
{
public partial class Form3 : Form
{
    MySqlConnection connection = new MySqlConnection("server=localhost;user=root;database=Aliena_Store;port=3306;password=Blackie");
    public Form3()
    {
        InitializeComponent();
    }

    private void Form3_Load(object sender, EventArgs e)
    {
        {

          //MySqlConnection(VarribleKeeper.MySQLConnectionString);
            connection.Open();

            MySqlDataAdapter MyDA = new MySqlDataAdapter();
            string sqlSelectAll = "SELECT * From Aliena_Store.Game_Details";
            MyDA.SelectCommand = new MySqlCommand(sqlSelectAll, connection);

            DataTable table = new DataTable();
            MyDA.Fill(table);

            BindingSource bSource = new BindingSource();
            bSource.DataSource = table;

            dataGridView1.DataSource = bSource;

        }

    }

    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {

    }

    private void SeeForm2_Click(object sender, EventArgs e)
    {
        Hide();
        Form2 f = new Form2(); // This is bad
        f.Show();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        string updateQuery = ("UPDATE Aliena_Store.Game_details SET Quantity = '" + AddStock.Text + "'");

        try
        {
            MySqlCommand command = new MySqlCommand(updateQuery, connection);
            if (command.ExecuteNonQuery() == 1)
            {
                MessageBox.Show("DATA UPDATED");
            }
            else
            {
                MessageBox.Show("Data NOT UPDATED");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

    }

    private void AddStock_TextChanged(object sender, EventArgs e)
    {

    }
}
}

知道我的代码哪里出错了吗?

s71maibg

s71maibg1#

update查询没有where子句,因此每个记录都被设置为新数量,executenonquery将返回一个更改了行数的数字。
仅当表中只有一行时,代码才会符合正确的if大小写。
一个简单的解决方法如下

if (command.ExecuteNonQuery() > 0)
    ... ok ...

相反,如果只想更新一条记录,则需要向查询中添加where条件。但是这个where条件要求您提供数据库表primarykey的值,以便引擎识别要更改的记录。
比如说

string updateQuery = @"UPDATE Aliena_Store.Game_details 
                       SET Quantity = @qty 
                       WHERE GameID = @id";

此查询将仅更新具有指定gameid的记录(其中gameid是字段的假想名称,具有表的主键)
请注意,我在查询中使用了参数占位符。虽然这不是您问题的主要主题,但值得注意的是,编写正确的sql代码除了安全性之外,还将给您带来许多好处。在解析字符串文本以更正数据类型时没有问题,sql命令的可读性更强。

MySqlCommand command = new MySqlCommand(updateQuery, connection);
command.Parameters.Add("@qty", MySqlDbType.VarChar).Value = AddStock.Text;
command.Parameters.Add("@id", MySqlDbType.Int32).Value = Convert.ToInt32(txtGameID.Text);
if (command.ExecuteNonQuery() > 0)
     ....

相关问题