2014/09/06

updatecommand 已經影響必須是 1 記錄的 0

.NET 開發時,有時會遇到"updatecommand 已經影響必須是 1 記錄的 0"這樣的錯誤訊息

這個錯誤訊息的意思是,DataRow 中包含的原始資料已經在資料庫找不到了,有可能是資料庫的資料已經被其他人改過,也有可能 DataRow 包含了錯誤訊息。其實在 DataRow 中含有修改前的資料與修改後的資料,可以透過 DataRowVersion.Original 的方式可以存取到修改前的資料(請參考 http://msdn.microsoft.com/zh-tw/library/ms135373(v=vs.110).aspx),DataAdapter會依據 DataRowVersion.Original 中含有的資料去資料庫找,並更新該筆資料,若依據 DataRowVersion.Original 的資料在資料庫中找不到符合的資料就會出現"updatecommand 已經影響必須是 1 記錄的 0" 的錯誤訊息。

若發生這個錯誤時,先確定資料庫的資料是否被其他人異動過。若不是,就透過 DataRowVersion.Original 去找尋那一個欄位的資料值是有問題,找找看程式是否拿到更早的資料或是查錯資料表。

若資料存進資料庫成功後,可以執行 DataTable.AcceptChanges(); ,這個動作會將現在的資料複製到  DataRowVersion.Original 的資料中,來確保資料庫的資料已經跟 DataTable 是一致的了,下次存資料庫時,才不會因為資料不一致又發生 "updatecommand 已經影響必須是 1 記錄的 0" 的錯誤訊息。

沒有留言:

張貼留言