C#MYSQL,进行UPDATE操作时Column count doesn't match value count at row 1错误挠头记录

 

 

如山图

错误的意思就是 进行UPDATE的时候,给定的列名和参数数量不符

排查了很久,一直纠结在MySqlParameter的处理上,结果发现语句

UPDATE `trades` SET `buyernick`=@buyernick,`sellerid`=@sellerid,`receivername`=@receivername,`receivermobile`=@receivermobile,`receiverstate`=@receiverstate,`receivercity`=@receivercity,`receiverarea`=@receiverarea,`receiveraddress`=@receiveraddress,`payment`=@payment,`paytime`=@paytime,`payway`=@payway,`createtime`=@createtime,`modifiedtime`=@modifiedtime,`sellermemo`=@sellermemo,`buyermessage`=@buyermessage,`postfee`=@postfee,`status`=@status,`hasrefund`=@hasrefund,`localstatus`=@localstatus,`platform`=@platform WHERE `Tid`=88166832817679985

  

 

和MySqlParameter内的parameters的对应没有问题,出去溜达了一圈突然想起来

MySqlCommand 在 ExecuteNonQuery 的时候 跟MYSQL的语句执行时一样,如果遇到触发器的错误,会返回触发器的错误

所以这个提示并不一定代表当前的UPDATE语句有问题.

而可能出现在触发器上  果然

一条触发器 

if new.modifiedtime >old.modifiedtime then
insert into tradessnaps select * from trades where tid=old.tid;
end if

  

trades表更新后执行

于是查看 

tradessnaps 表

发现

 

 

 

 

 

 如上图,这条触发器是在订单更新后执行了一个订单的快照表插入工作,而快照表要插入的数据的来源是通过SELECT*得来,所以得到的结果是全部的列的值 而 tradessnap表的列数量要比trades少,没有打到键值的一一对应标准.

所以 

 

1 当出现此错误的时候,检查自己要操作的目标表有没有触发器引发了错误(其他错误也可能因为触发器错误引起),所以触发器要保证绝对的准确性和稳定性,不然不好排查

2 类似 

insert into tradessnaps select * from trades where tid=old.tid; 
这样的语句,一定要确定 原表和目标表列一致性

转载于:https://www.cnblogs.com/afterwards/p/7822481.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值