情境
現在有個簡單的資料表,有id, flag兩個欄位,在抓取所有flag為0的id之後,我想把剛剛抓取的那些id的flag設為1,使用DataAdapter.Update來更新,程式碼如下:
好傻好天真的以為DataAdapter.Update可以對每個id update flag=1,執行之後發現這樣是不能更新的。
Why & Solution
查了MSDN之後就明白為什麼了:
當應用程式呼叫 Update 方法時,DataAdapter 會根據 DataSet 中設定的索引順序檢查 RowState 屬性,並反覆的為每個資料列執行必要的 INSERT、UPDATE 或 DELETE 陳述式。
重點在於Row有沒有被修改過,原先的程式碼中,table在Fill之後並沒有做變更的動作,所以DataAdapter.Update也就不會更新了。
粗略修改下面兩段程式碼之後,就成功Update了。
RowState屬性可以參考這篇:ASP.NET DataRow的DataRowState概念
另外補充:
呼叫 DataSet.AcceptChanges 方法或 DataTable.AcceptChanges 方法即可認可 DataSet 或 DataTable 中的所有變更。如果在呼叫 Update 方法之前呼叫了這兩個方法的其中一個,則除非在呼叫 AcceptChanges 或 AcceptChanges 之後有更進一步地變更,否則呼叫 Update 時將不會認可任何變更。
回目錄
回首頁
沒有留言 :
張貼留言