2011年12月1日 星期四

DataAdapter.Update 不成功? 因為 RowState 沒變更

 

情境

現在有個簡單的資料表,有id, flag兩個欄位,在抓取所有flag為0的id之後,我想把剛剛抓取的那些id的flag設為1,使用DataAdapter.Update來更新,程式碼如下:

wrong_code

好傻好天真的以為DataAdapter.Update可以對每個id update flag=1,執行之後發現這樣是不能更新的。

Why & Solution

查了MSDN之後就明白為什麼了:

當應用程式呼叫 Update 方法時,DataAdapter 會根據 DataSet 中設定的索引順序檢查 RowState 屬性,並反覆的為每個資料列執行必要的 INSERT、UPDATE 或 DELETE 陳述式。

重點在於Row有沒有被修改過,原先的程式碼中,table在Fill之後並沒有做變更的動作,所以DataAdapter.Update也就不會更新了。

粗略修改下面兩段程式碼之後,就成功Update了。

modify_1

modify_2

RowState屬性可以參考這篇:ASP.NET DataRow的DataRowState概念

另外補充:

呼叫 DataSet.AcceptChanges 方法或 DataTable.AcceptChanges 方法即可認可 DataSetDataTable 中的所有變更。如果在呼叫 Update 方法之前呼叫了這兩個方法的其中一個,則除非在呼叫 AcceptChangesAcceptChanges 之後有更進一步地變更,否則呼叫 Update 時將不會認可任何變更。


回目錄
回首頁


沒有留言 :

張貼留言

Related Posts Plugin for WordPress, Blogger...