使用ADO.Net通过按钮点击更新SQL表记录失败如何解决?
存在的问题&修复方案
你的代码存在几个明显问题,按优先级修复即可实现正常更新:
- 调用
UpdatePerson方法前仅给Person对象的ID、Name属性赋值,未设置Age、Sex属性,这两个字段会使用默认值(int类型默认0、string默认null)写入数据库,不符合更新预期。 - 更新操作执行完成后没有重新触发GridView的数据查询绑定,界面上显示的还是更新前的旧数据。
- GridView查询方法中存在变量名错误:声明的数据库实例变量名为
database,调用查询方法时误用了未定义的banco变量,会直接导致查询报错。 - 可选优化:可以捕获
ExecuteNonQuery的返回值判断是否有匹配ID的记录被更新,同时利用UpdatePerson的返回值给用户明确的操作反馈。
修正后代码示例
1. 修复更新按钮点击逻辑
private void btn_Update_Click(object sender, EventArgs e) { // 先校验ID输入合法性,避免转换报错 if (!int.TryParse(txb_Id.Text, out int id)) { MessageBox.Show("请输入正确的数字ID"); return; } Person person = new Person(); person.ID = id; person.Name = txb_Name.Text; // 补充从界面控件获取Age和Sex赋值,以下控件名请对应你的实际界面修改 person.Age = int.Parse(txb_Age.Text); person.Sex = txb_Sex.Text; // 用返回值判断更新结果 bool updateResult = person.UpdatePerson(); if (updateResult) { MessageBox.Show("更新成功"); // 更新完成后重新查询绑定GridView BindGridView(); } else { MessageBox.Show("更新失败,请检查数据是否正确"); } }
2. 封装GridView绑定逻辑,修复变量名错误
// 把GridView绑定逻辑封装为公共方法,查询和更新后都可以直接调用 private void BindGridView() { Database database = new Database(); string sql = "select * from person"; // 修复之前的变量名错误,把banco改为正确的database变量 DataTable dataTable = database.ExecuteGenericSearch(sql); dataGridView1.DataSource = dataTable; } // 查询按钮点击事件直接调用封装好的方法 private void btn_CG_Click(object sender, EventArgs e) { BindGridView(); }
额外调试建议
如果修复后还是更新失败,可以在UpdatePerson方法的catch块里输出异常的具体信息,或者打印ExecuteNonQuery的返回值:如果返回值为0,说明没有匹配到对应ID的记录,检查传入的ID是否真实存在于数据库的person表中。
另外建议把UpdatePerson里的参数赋值改为按参数名匹配,避免后续新增参数时索引错位:
// 替换原来的索引赋值 cmd.Parameters["@name"].Value = Name; cmd.Parameters["@age"].Value = Age; cmd.Parameters["@sex"].Value = Sex; cmd.Parameters["@id"].Value = Id;
内容的提问来源于stack exchange,提问作者user17343681
相关产品推荐
相关产品推荐

