用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中的行並更新數據庫
============================================================
而不是使用datatable.Rows.RemoveAt(行下標);
============================================================
如果使用的是RemoveAt方法,在調用sqldataadapter.Update(datatable);時不會從數據庫中刪除記錄。
原因: RemoveAt是直接在DATATABLE中將ROW刪除,如果用DELETE的話則只是標記ROW為刪除,在調用UPDATE的時候才會真正的從DATATABLE中刪除,也就是你的SQL刪除語句還需要你的DATATABLE提供數據,而你用RemoveAt已經將DATATABLE中的數據徹底刪除了,就沒有辦法為SQL刪除語句提供了所以就出現這個狀況,建議使用DELETE的方法
