C# DataAdapter.Update() 無法更新資料表中刪除的資料行
用DataAdapter.Update() 方法更新刪除了部分DataRow 的 DataTable 。但是資料庫中的資料沒有隨著更新而變化。
原因:DataTable 刪除 DataRow 時,使用的是DataTable.Rows.Remove(DataRow ) 或 DataTable.Rows.RemoveAt(DataRowIndex) 方法。
解決方法:使用 DataTable.Rows[rowIndex].Delete() ; 方法刪除資料。
詳解如下:
DataAdapter.Update() 方法主要用來:對資料庫資料進行批量更新(插入、更新、刪除)。
以更新資料表 DataTable 為例:
當對資料庫查出的資料表 dataTable 進行相關的插入、更新、刪除操作後,使用DataAdapter.Update() 更新資料之前,不能呼叫 DataTable.AcceptChanges()方法。因為:AcceptChanges()方法會提交自上次呼叫 AcceptChanges 以來對該表進行的所有更改。DataRowState 也發生更改:所有 Added 和 Modified 行都變為 Unchanged,Deleted 行則被移除。這樣的話,DataAdapter.Update() 檢測不到資料的變化,就不能更新資料。
DataTable.Rows.Remove(DataRow ) 和 DataTable.Rows.RemoveAt(DataRowIndex) 方法刪除 DataRow 時,等同於先呼叫DataTable.Rows[rowIndex].Delete() , 再呼叫 DataTable.AcceptChanges()。
------------------------------------------------------------------------------
sqldataadapter Update 刪除datatable中的行並更新資料庫
在使用sqldataadapter Update方法更新客戶端datatable的時候,如果是刪除行,要使用datatable.Rows[行下標].Delete();============================================================
而不是使用datatable.Rows.RemoveAt(行下標);
============================================================
如果使用的是RemoveAt方法,在呼叫sqldataadapter.Update(datatable);時不會從資料庫中刪除記錄。
原因: RemoveAt是直接在DATATABLE中將ROW刪除,如果用DELETE的話則只是標記ROW為刪除,在呼叫UPDATE的時候才會真正的從DATATABLE中刪除,也就是你的SQL刪除語句還需要你的DATATABLE提供資料,而你用RemoveAt已經將DATATABLE中的資料徹底刪除了,就沒有辦法為SQL刪除語句提供了所以就出現這個狀況,建議使用DELETE的方法