我尝试使用按钮更新我的商店库存水平,当按下此按钮时我希望所有数量都增加文本框中的数量,我已经实现了一些代码来执行此操作但是它始终命中未插入数据的消息...
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)
{
}
}
}
我的代码出错的任何线索?
答案 0 :(得分:0)
您的更新查询没有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)
....