• 不同版本操作系统和数据库的之间链接,和操作



    本文以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
  • 相关阅读:
    转化磁盘格式 FATS > NTFS
    hzgb2312 转码工具
    关于南空调,北暖气
    BSTR、_bstr_t与CComBSTR
    string 转化为其他类型
    VARIANT 、_variant_t 与 COleVariant
    恐怖级算法题目一【据说是百度的面试题】
    谈论下各大公司的网络游戏
    chinacloud,记录自己的云计算体会
    回文数的判断
  • 原文地址:https://www.cnblogs.com/haitaofeiyang/p/2013474.html
Copyright © 2020-2023  润新知