【问题标题】:SQL update query not updating table dataSQL更新查询不更新表数据
【发布时间】:2020-05-31 15:54:17
【问题描述】:

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

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

【问题讨论】:

  • 您应该查看Can we stop using AddWithValue() already? 并停止使用.AddWithValue() - 它可能会导致意想不到和令人惊讶的结果...
  • 您的tft_pcode.Text 值是什么样的?当您执行SELECT * FROM dbo.table_products WHERE pcode LIKE (that value) 时,您会得到任何结果吗??
  • @marc_s 虽然我更喜欢 AddWithValue 而不是 SQL 可注入性!
  • @CaiusJard:同意!

标签: c# sql sql-server sql-update xquery-update


【解决方案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");

【讨论】:

  • 我已经尝试过 pcode = @pcode 也尝试过将 pcode 与 textbox_pcode 中的值进行比较,但仍然没有帮助
  • 这不是问题所在,而是 pcode 的 VALUE(或者更确切地说是 tft_pcode.Text 的值)与表中的任何内容都不匹配。
  • 实施 Neil 建议的更改并告诉我们结果
  • 感谢您的帮助,您是正确的,它没有匹配任何内容,因为我遇到的问题是,当此表单加载时,它正在创建新的 pcode,而我正在尝试将其与旧值匹配。无论如何我已经解决了这个问题
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 2020-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多