0

这是我的代码,它显示成功,但它没有更新表中的行。

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");
4

3 回答 3

1

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");
于 2020-05-31T16:22:13.900 回答
0

如果您使用的是基于文件的数据库,例如 sql server mdf 文件,该文件在您运行项目时动态附加到您的数据库服务器,您应该知道您的程序正在更新的数据库不一定与您正在查找的文件相同在你的管理工作室。查看您的连接字符串 - 如果它提到 DataDirectory,那么很可能是正在更新的 bin/Debug 或 bin/Release(取决于您的活动构建配置)文件夹中的数据库文件,而不是项目文件夹中的那个。项目文件夹中的 db 被复制到 bin/* 您运行项目的每个 tine 中。这通常是“我的程序说它更新了我的数据库但它没有”的一个很棒的原因

于 2020-05-31T16:49:57.043 回答
0

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

于 2020-05-31T17:31:42.963 回答