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

C# MVC应用中MySQL执行UPDATE操作不更新列值问题求解

前端存在的问题及修复

    1. 请求地址错误:你后端处理更新的Action名为UpdatePrice,但AJAX里的url配置的是/Product/Index,请求根本没有命中更新接口,自然不会执行更新逻辑。
      修复:把AJAX的url改成/Product/UpdatePrice
    1. 缺少产品ID参数:你JS里product.idproduct的赋值代码被注释了,且视图代码中根本没有存储productId的字段,后端拿不到产品ID无法定位需要更新的条目。
      修复:首先在视图的tr上添加data属性存储产品ID:
    <tr data-product-id="@item.productId">
    
    然后在JS的更新逻辑里取出ID赋值:
    var product = {};
    product.productId = row.data('product-id');
    product.price = row.find(".Price").find("input").val(); // 直接取input的值更稳妥,不要取span的
    
    1. 请求数据格式错误:手动拼接JSON字符串极易出现转义错误,不需要手动拼接,直接传递JSON对象即可。
      修复:修改AJAX的data配置:
    $.ajax({
        type: "POST",
        url: "/Product/UpdatePrice",
        data: JSON.stringify(product),
        contentType: "application/json; charset=utf-8",
        dataType: "json"
    });
    

后端存在的问题及修复

    1. SQL语句语法错误:你写的UPDATE product SET price=@price = " + product.price + "存在语法错误,同时混用了参数化查询和字符串拼接,既不符合规范也存在SQL注入风险。
      修复:修改SQL语句为标准参数化写法:
    string query = "UPDATE product SET price=@price WHERE productId=@idproduct";
    
    1. 产品ID参数未赋值:给@idproduct参数赋值的代码被注释了,导致WHERE条件没有有效值,匹配不到任何数据,自然不会执行更新。
      修复:取消该行注释,确保参数赋值:
    cmd.Parameters.AddWithValue("@idproduct", product.productId);
    
    1. 参数类型未校验:前端传入的price是字符串类型,建议后端转成对应数据库字段的数值类型(比如decimal)后再赋值给参数,避免类型不匹配导致更新失败。
    1. 缺少执行结果校验:ExecuteNonQuery()的返回值是SQL执行后受影响的行数,可以加日志或者断点查看返回值,如果返回0说明没有匹配到需要更新的条目,方便排查问题。
      修复示例:
    con.Open();
    int affectRows = cmd.ExecuteNonQuery();
    // 这里可以加日志输出affectRows,判断是否更新成功
    con.Close();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:57:03