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; 
這樣的語句,一定要確定 原表和目標表列一致性


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM