gpt4 book ai didi

c# - MySQL 更新数据网格中的整列

转载 作者:行者123 更新时间:2023-11-29 18:01:18 25 4
gpt4 key购买 nike

我试图使用一个按钮来更新我的商店库存水平,当按下此按钮时,我希望所有数量都增加文本框中的数量,我尝试过实现一些代码来执行此操作,但是它总是会出现数据未插入消息...

 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)
{

}
}
}

我的代码哪里出了问题有什么线索吗?

最佳答案

您的更新查询没有 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)
....

关于c# - MySQL 更新数据网格中的整列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48306447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com