这是我的代码,它显示成功,但它没有更新表中的行。
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();
返回受影响的行数。 在您的情况下,它可能是 0(但仍然值得获取值并检查(。
在您的情况下,听起来查询末尾的where pcode like @pcode
与表中的任何内容都不匹配。
var rowsUpdated = cm.ExecuteNonQuery();
con.Close();
if(rowsUpdate>0) MessageBox.Show("Product updated successfully");
else MessageBox.Show("Product NOT updated successfully");
如果您使用的是基于文件的数据库,例如在运行项目时动态附加到数据库服务器的 sql Server mdf 文件,则应注意程序正在更新的数据库不一定与您在管理工作室中查找的文件相同。查看您的连接字符串 - 如果它提到 DataDirectory,则很可能是正在更新的 bin/Debug 或 bin/release(取决于您的活动构建配置(文件夹中的数据库文件,而不是项目文件夹中的数据库文件。项目文件夹中的数据库将复制到运行项目的每个 bin/* 中。这通常是"我的程序说它更新了我的数据库但没有"的一个很棒的原因 - 要么每次程序运行时数据库都被替换为干净的数据库,要么开发人员正在查找一个数据库文件并且程序正在更新另一个数据库文件
我解决了这个问题 问题是我试图将 pcode(应用程序(与 pcode(数据库(匹配,但没有这样做。 那是因为当我的更新表单加载时,我在其事件中有 pcode 生成方法,所以我与旧的 pcode 值匹配,它实际上正在做的是,它与新生成的 pcode 匹配。 所以我从事件中删除了 pcode 生成方法form_load问题解决了。 谢谢大家抽出宝贵时间。