用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()。
Rows.Remove() 和 DataRow.Delete() 方法使用过程中的注意事项请参考: Rows.Remove() 和 DataRow.Delete() 的区别详解