C# MVC应用中MySQL执行UPDATE操作不更新列值问题求解
前端存在的问题及修复
- 请求地址错误:你后端处理更新的Action名为
UpdatePrice,但AJAX里的url配置的是/Product/Index,请求根本没有命中更新接口,自然不会执行更新逻辑。
修复:把AJAX的url改成/Product/UpdatePrice
- 请求地址错误:你后端处理更新的Action名为
- 缺少产品ID参数:你JS里
product.idproduct的赋值代码被注释了,且视图代码中根本没有存储productId的字段,后端拿不到产品ID无法定位需要更新的条目。
修复:首先在视图的tr上添加data属性存储产品ID:
然后在JS的更新逻辑里取出ID赋值:<tr data-product-id="@item.productId">var product = {}; product.productId = row.data('product-id'); product.price = row.find(".Price").find("input").val(); // 直接取input的值更稳妥,不要取span的- 缺少产品ID参数:你JS里
- 请求数据格式错误:手动拼接JSON字符串极易出现转义错误,不需要手动拼接,直接传递JSON对象即可。
修复:修改AJAX的data配置:
$.ajax({ type: "POST", url: "/Product/UpdatePrice", data: JSON.stringify(product), contentType: "application/json; charset=utf-8", dataType: "json" });- 请求数据格式错误:手动拼接JSON字符串极易出现转义错误,不需要手动拼接,直接传递JSON对象即可。
后端存在的问题及修复
- SQL语句语法错误:你写的
UPDATE product SET price=@price = " + product.price + "存在语法错误,同时混用了参数化查询和字符串拼接,既不符合规范也存在SQL注入风险。
修复:修改SQL语句为标准参数化写法:
string query = "UPDATE product SET price=@price WHERE productId=@idproduct";- SQL语句语法错误:你写的
- 产品ID参数未赋值:给
@idproduct参数赋值的代码被注释了,导致WHERE条件没有有效值,匹配不到任何数据,自然不会执行更新。
修复:取消该行注释,确保参数赋值:
cmd.Parameters.AddWithValue("@idproduct", product.productId);- 产品ID参数未赋值:给
- 参数类型未校验:前端传入的price是字符串类型,建议后端转成对应数据库字段的数值类型(比如decimal)后再赋值给参数,避免类型不匹配导致更新失败。
- 缺少执行结果校验:
ExecuteNonQuery()的返回值是SQL执行后受影响的行数,可以加日志或者断点查看返回值,如果返回0说明没有匹配到需要更新的条目,方便排查问题。
修复示例:
con.Open(); int affectRows = cmd.ExecuteNonQuery(); // 这里可以加日志输出affectRows,判断是否更新成功 con.Close();- 缺少执行结果校验:
内容的提问来源于stack exchange,提问作者Las Sincas
相关产品推荐
相关产品推荐

