zoukankan      html  css  js  c++  java
  • 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的方法
  • 相关阅读:
    Use Eclipse to develop groovy[docs.codehaus.org]
    Map.putAll方法——追加另一个Map对象到当前Map集合(转)
    限制某个进程只能在某个CPU上运行
    Java实现蓝桥杯 算法提高 身份证号码升级
    Java实现蓝桥杯 算法提高 身份证号码升级
    Java实现蓝桥杯 算法提高 身份证号码升级
    Java实现蓝桥杯 算法提高 身份证号码升级
    Java蓝桥杯 算法训练 复数归一化
    Java实现 蓝桥杯 算法提高 最大乘积
    Java实现 蓝桥杯 算法训练 p1103
  • 原文地址:https://www.cnblogs.com/zouhao/p/9977767.html
Copyright © 2011-2022 走看看