zoukankan      html  css  js  c++  java
  • 不同版本操作系统和数据库的之间链接,和操作


    本文以DataTable.Rows[index].Delete()和DataTable.RemoveAt(index)讲解AcceptChanges()和RejectChanges()的区别。


    1. DataTable.Rows[index].Delete()

    该操作把指定行的状态(RowState)标记为Deleted,并未真正从DataTable中删除,此时DataTable的行数未变,引用该行将引发异常。
    接下来的AcceptChanges()可以将其从DataTable中删除,RejectChanges()回滚到以前的状态以撤销删除。
    所以在Delete()后执行Update()可以把更改提交到数据库,而在AcceptChanges()或RejectChanges()后执行Update()则不会更新数据库。

    2. DataTable.RemoveAt(index)

    该操作把指定行从DataTable的Rows集合中直接删除,这时DataTable中不存在该行,引用改行将引发异常。
    AcceptChanges()和RejectChanges()对该操作无效。因为不存在该行,也就不会有该行的RowState
    因此通过RemoveAt()操作删除的行无法通过Update()把更改提交到数据库。


    以下是对Delete()、RemoveAt()、AcceptChanges()和RejectChanges()进行的测试:

     1 /*
     2  * 对每行后注释格式的说明:
     3  * DataTable.Rows.Count => 各行的状态(测试数据共6行,逗号分割)
     4  * x: 标记为Deleted
     5  * -: 不存在
     6 */
     7 
     8 //
     9 // 情形 1
    10 //
    11 this.adapter.Fill(this.dataSet.table1);  // 6 => 1,2,3,4,5,6
    12 this.dataSet.table1.Rows[0].Delete();    // 6 => x,2,3,4,5,6
    13 this.dataSet.table1.RemoveAt(1);         // 5 => x,-,3,4,5,6
    14 this.dataSet.table1.RemoveAt(2);         // 4 => x,-,3,-,5,6
    15 this.dataSet.table1.RejectChanges();     // 4 => 1,-,3,-,5,6
    16 //
    17 // 情形 2
    18 //
    19 this.adapter.Fill(this.dataSet.table1);  // 6 => 1,2,3,4,5,6
    20 this.dataSet.table1.Rows[0].Delete();    // 6 => x,2,3,4,5,6
    21 this.dataSet.table1.AcceptChanges();     // 5 => -,2,3,4,5,6
    22 this.dataSet.table1.RemoveAt(1);         // 4 => -,2,-,4,5,6
    23 this.dataSet.table1.RemoveAt(2);         // 3 => -,2,-,4,-,6
    24 this.dataSet.table1.RejectChanges();     // 3 => -,2,-,4,-,6
    25 //
    26 // 情形 3
    27 //
    28 this.adapter.Fill(this.dataSet.table1);  // 6 => 1,2,3,4,5,6
    29 this.dataSet.table1.Rows[0].Delete();    // 6 => x,2,3,4,5,6
    30 this.dataSet.table1.RemoveAt(1);         // 5 => x,-,3,4,5,6
    31 this.dataSet.table1.AcceptChanges();     // 4 => -,-,3,4,5,6
    32 this.dataSet.table1.RemoveAt(2);         // 3 => -,-,3,4,-,6
    33 this.dataSet.table1.RejectChanges();     // 3 => -,-,3,4,-,6
    34 //
    35 // 情形 4
    36 //
    37 this.adapter.Fill(this.dataSet.table1);  // 6 => 1,2,3,4,5,6
    38 this.dataSet.table1.Rows[0].Delete();    // 6 => x,2,3,4,5,6
    39 this.dataSet.table1.RemoveAt(1);         // 5 => x,-,3,4,5,6
    40 this.dataSet.table1.RemoveAt(2);         // 4 => x,-,3,-,5,6
    41 this.dataSet.table1.AcceptChanges();     // 3 => -,-,3,-,5,6
    42 this.dataSet.table1.RejectChanges();     // 3 => -,-,3,-,5,6
  • 相关阅读:
    时间选择器UIDatePicker的使用
    在app中屏蔽第三方键盘
    plist文件的相关操作
    查看mac上的隐藏文件
    设置ARC有效或者无效
    Linux 下源代码安装编译 ImageMagick6.8.48 且使其支持 JPEG
    Linux Netcat 命令—网络工具中的瑞士军刀
    Linux 好书、经典书籍推荐
    让你拥有超能力:程序员应该掌握的统计学公式
    shell 脚本实现的守护进程
  • 原文地址:https://www.cnblogs.com/haitaofeiyang/p/2013474.html
Copyright © 2011-2022 走看看