C#操作Access数据库执行UPDATE提示Data Not Updated问题求助
Access数据库UPDATE操作无匹配行问题排查及解决方案
核心故障原因
OleDb访问Access数据库时,不识别参数名称,仅按照参数添加的顺序与SQL语句中参数出现的顺序一一对应匹配。
你的UPDATE语句中参数的出现顺序为:@tareekh、@company、@party、@hukam、@kg、@PCS、@pprice、@cprice、@wprice、@rprice、@billn、@quantity、@namee,但代码中首个添加的参数是@namee,导致所有参数完全错位,WHERE条件实际匹配的数值错误,找不到符合条件的更新行,因此返回0行受影响进入Data Not Updated分支。
修复方案
1. 调整参数添加顺序(必改)
将参数添加顺序调整为与SQL语句中参数出现顺序完全一致,SET部分的参数在前,WHERE条件的参数放在最后:
OleDbCommand cmmd = new OleDbCommand(query, connection); // 顺序与UPDATE语句中参数出现顺序完全对应 cmmd.Parameters.AddWithValue("@tareekh", ddate); cmmd.Parameters.AddWithValue("@company", ccompany); cmmd.Parameters.AddWithValue("@party", pparty); cmmd.Parameters.AddWithValue("@hukam", oorder); cmmd.Parameters.AddWithValue("@kg", kkg); cmmd.Parameters.AddWithValue("@PCS", PpCS); cmmd.Parameters.AddWithValue("@pprice", ppprice); cmmd.Parameters.AddWithValue("@cprice", ccprice); cmmd.Parameters.AddWithValue("@wprice", wwprice); cmmd.Parameters.AddWithValue("@rprice", rrprice); cmmd.Parameters.AddWithValue("@billn", bbilln); cmmd.Parameters.AddWithValue("@quantity", qquantity); // WHERE条件的参数放在最后 cmmd.Parameters.AddWithValue("@namee", nname);
2. 可选优化排查点
如果调整顺序后仍有问题,可逐一排查以下场景:
- 数据类型匹配:如果
tareekh是日期类型、kg/price/quantity是数值类型,不要直接传入字符串,需先转换为对应数据类型再传参,避免隐式转换导致匹配失败 - 确认匹配记录存在:执行更新前可先执行
SELECT COUNT(*) FROM prod WHERE namee=?传入nname,验证数据库中确实存在对应匹配记录 - 确认数据库文件路径:
|DataDirectory|默认指向程序运行目录,调试时修改的源码目录下的accdb文件和运行时bin/Debug下的accdb副本是两个文件,可临时改为绝对路径测试验证 - 关键字转义:如果
PCS等字段名是Access保留关键字,可在SQL语句中用方括号包裹,例如[PCS]=@PCS
内容的提问来源于stack exchange,提问作者Dubai Pallets Store
相关产品推荐
相关产品推荐

