如何修复C# API中的Update语句?无报错但数据未更新
问题解决:C# MySQL更新语句无报错但不生效
核心原因
你的Update语句根本没用到传入的参数——SQL里的变量没加@前缀,MySQL会把TeacherFname这类字符串解析为表的字段名,相当于执行teacherfname = teacherfname这种无效赋值,自然不会修改数据,也不会抛出错误。
修正步骤
1. 修复SQL语句
给所有参数名加上@前缀,和你通过AddWithValue传入的参数名严格对应:
update teachers set teacherfname=@TeacherFname, teacherlname=@TeacherLname, employeenumber=@EmployeeNumber,salary=@Salary where teacherid=@TeacherId
2. 优化后的完整代码
加入using语句自动管理数据库连接(避免手动关闭导致的连接泄漏),同时捕获ExecuteNonQuery的返回值,方便排查是否真的有行被更新:
public void UpdateTeacher(int id, [FromBody]Teacher TeacherInfo) { using (MySqlConnection Conn = Teachers.AccessDatabase()) { Conn.Open(); MySqlCommand cmd = Conn.CreateCommand(); // 修正后的SQL,参数前必须加@ cmd.CommandText = "update teachers set teacherfname=@TeacherFname, teacherlname=@TeacherLname, employeenumber=@EmployeeNumber,salary=@Salary where teacherid=@TeacherId"; cmd.Parameters.AddWithValue("@TeacherFname", TeacherInfo.TeacherFname); cmd.Parameters.AddWithValue("@TeacherLname", TeacherInfo.TeacherLname); cmd.Parameters.AddWithValue("@EmployeeNumber", TeacherInfo.EmployeeNumber); cmd.Parameters.AddWithValue("@Salary", TeacherInfo.Salary); cmd.Parameters.AddWithValue("@TeacherId", id); // 获取受影响行数,用于排查 int affectedRows = cmd.ExecuteNonQuery(); // 如果受影响行数为0,说明没有匹配到对应ID的记录 if (affectedRows == 0) { throw new InvalidOperationException($"未找到ID为{id}的教师记录,更新操作无效果"); } } }
3. 额外排查点
- 确认传入的
id值是否正确,是否存在于数据库的teachers表中 - 检查
TeacherInfo的属性是否正确绑定(比如FromBody是否解析到了有效值) - 确保数据库中
teacherid字段的类型和传入的id类型一致(都是int类型)
内容的提问来源于stack exchange,提问作者Jigar Mehta
相关产品推荐
相关产品推荐

