You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Update语句无作用:点击更新提示成功但数据库未变更,SQL语句是否有误?

问题描述

在ChbBeds_numericUpDown中输入数字并点击"Update"按钮后,系统弹出"Data Updated"提示,但数据库里的数据完全没变化,相关代码如下:

private void ChbUp_button_Click(object sender, EventArgs e)
{
    try 
    {
        string statement = "UPDATE ChamberXPavilions SET Beds count = @beds_count WHERE Pav_name = @pav_name AND Chamber_number = @chamber_number";

        cmd = new OleDbCommand(statement, conn);

        cmd.Parameters.AddWithValue("@pav_name", Chbpav_comboBox.Text);
        cmd.Parameters.AddWithValue("@chamber_number", Chb_numericUpDown.Value);
        cmd.Parameters.AddWithValue("@beds_count", ChbBeds_numericUpDown.Value);

        conn.Open();
        cmd.ExecuteNonQuery();
        conn.Close();

        MessageBox.Show("Data updated");
        showdata();
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
}

请问是SQL语句有错误吗?

问题排查与解决
  1. SQL语句存在语法错误
    字段名Beds count包含空格,直接写入SQL会被数据库误认为是两个独立的标识符,导致更新操作找不到正确的目标字段。需要用方括号把带空格的字段名包裹起来,修正后的SQL语句:

    UPDATE ChamberXPavilions SET [Beds count] = @beds_count WHERE Pav_name = @pav_name AND Chamber_number = @chamber_number
    
  2. 额外排查点

    • 检查WHERE子句的参数值是否匹配:确认Chbpav_comboBox.Text和Chb_numericUpDown.Value是否和数据库中Pav_name、Chamber_number的记录完全一致,比如是否存在大小写、前后空格的差异,这会导致没有匹配的记录被更新。
    • 查看受影响行数:ExecuteNonQuery()会返回被更新的行数,可以添加代码判断是否有记录被修改:
      int affectedRows = cmd.ExecuteNonQuery();
      if(affectedRows == 0)
      {
          MessageBox.Show("没有找到匹配的记录进行更新");
      }
      

内容的提问来源于stack exchange,提问作者paramicia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 06:01:00