SQL 更新查询未更新 table 数据

SQL update query not updating table data

这是我的代码,显示成功但未更新 table 中的行。

cm = new SqlCommand("update table_products set pname = @pname, pdesc = @pdesc, bid = @bid, cid = @cid, cost = @cost, price = @price, reorder = @reorder where pcode like @pcode", con);

cm.Parameters.AddWithValue("@pcode", tft_pcode.Text);
cm.Parameters.AddWithValue("@barcode", tft_barcode.Text);
cm.Parameters.AddWithValue("@pname", tft_pname.Text);
cm.Parameters.AddWithValue("@pdesc", tft_pdescription.Text);
cm.Parameters.AddWithValue("@bid", bid);
cm.Parameters.AddWithValue("@cid", cid);
cm.Parameters.AddWithValue("@cost", Double.Parse(tft_cost.Text));
cm.Parameters.AddWithValue("@price", Double.Parse(tft_price.Text));
cm.Parameters.AddWithValue("@reorder", int.Parse(tft_reorder.Text));

cm.ExecuteNonQuery();
con.Close();

MessageBox.Show("Product updated successfully");

cm.ExecuteNonQuery(); returns 受影响的行数。在你的情况下,它可能是 0(但仍然值得获取值并检查)。

在您的情况下,听起来 where pcode like @pcode 在您查询的末尾,与 table 中的任何内容都不匹配。

var rowsUpdated = cm.ExecuteNonQuery();
con.Close();

if(rowsUpdate>0) MessageBox.Show("Product updated successfully");
else MessageBox.Show("Product NOT updated successfully");

如果您使用的是基于文件的数据库,例如 sql 服务器 mdf 文件,当您 运行 您的项目时,该文件正在动态附加到您的数据库服务器,您应该知道数据库是您的正在更新的程序不一定是您正在使用管理工作室查看的同一文件。查看您的连接字符串 - 如果它提到 DataDirectory 那么它可能是正在更新的 bin/Debug 或 bin/Release (取决于您的活动构建配置)文件夹中的数据库文件,而不是你的项目文件夹。每次 运行 项目时,项目文件夹中的数据库都会被复制到 bin/* 中。这通常是 "my program says it updates my db but it doesn't" 的一个重要原因 - 每次程序 运行 时数据库都被一个干净的数据库替换,或者开发人员正在查看一个数据库文件并且程序正在更新另一个

我解决了这个问题 问题是我试图将 pcode(应用程序)与 pcode(数据库)匹配,但没有这样做。 那是因为当我的更新表单加载时,我在它的事件中有 pcode generate 方法,所以我正在匹配旧的 pcode 值,它实际上正在做的是,它正在与新生成的 pcode 匹配。 所以我从 form_load 事件中删除了 pcode generate 方法,问题就解决了。 谢谢大家的宝贵时间。