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语句有错误吗?
问题排查与解决
SQL语句存在语法错误
字段名Beds count包含空格,直接写入SQL会被数据库误认为是两个独立的标识符,导致更新操作找不到正确的目标字段。需要用方括号把带空格的字段名包裹起来,修正后的SQL语句:UPDATE ChamberXPavilions SET [Beds count] = @beds_count WHERE Pav_name = @pav_name AND Chamber_number = @chamber_number额外排查点
- 检查
WHERE子句的参数值是否匹配:确认Chbpav_comboBox.Text和Chb_numericUpDown.Value是否和数据库中Pav_name、Chamber_number的记录完全一致,比如是否存在大小写、前后空格的差异,这会导致没有匹配的记录被更新。 - 查看受影响行数:
ExecuteNonQuery()会返回被更新的行数,可以添加代码判断是否有记录被修改:int affectedRows = cmd.ExecuteNonQuery(); if(affectedRows == 0) { MessageBox.Show("没有找到匹配的记录进行更新"); }
- 检查
内容的提问来源于stack exchange,提问作者paramicia
相关产品推荐
相关产品推荐

