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

如何修复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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:45:37