• 理解DataSet的数据缓存机制


    虽然在以前的开发中经常使用DataSet类,但是重来没有涉及到数据缓存机制这块内容。今天看了一下,也算是做点总结。

    在理解数据缓存机制之前需要理解DataRow的两个概念,即行状态行版本。行状态就是指DataRow的RowState属性,它可以的取值有Added、Deleted、Detached、Modified、Unchanged(含义可以在MSDN上查到),它用来描述数据行的状态,比如在删除某一行后,此行并不会本真正的被删除,因此它的行状态是Deleted;行版本有四种取值,分别是Current、Default、Original、Proposed,在对某一行的数据进行了修改后,该行数据就有了两个版本,分别是Original和Current。在调用AcceptChanges()或RejectChanges()方法之后,数据行的状态就会变为Unchanged。
    现在应该可以理解
    所谓的数据缓存机制了,它是指在添加、删除、修改数据后,DataSet中的数据并不会真正的被更改,直到调用AcceptChanges()后,这些数据才会被真正的更改。
    下边给出一段代码说明含义。

    {
       
    //前边的代码实现了用DataAdapter填充DataSet类的实例:ds

       DataTable tbl_Customers 
    = ds.Table["Customers"];

       DataRow myRow;
       
    if (tbl_Customers.Rows.Count>0)
       
    {
          myRow 
    = tbl_Customers.Rows[0];

          
    //输出修改前的行状态和行版本
          Debug.WriteLine("修改前");
          Debug.WriteLine(
    " 行状态是:" + myRow.RowState.ToString());
          Debug.WriteLine(
    " 该行CompanyName字段Original行状态是:" + myRow["CompanyName",DataRowVersion.Original]);
          Debug.WriteLine(
    " 该行CompanyName字段Current行状态是:" + myRow["CompanyName",DataRowVersion.Current]);

          
    //修改操作
          myRow["CompanyName"= "cnblogs.com";

          
    //输出修改后的行状态和行版本
          Debug.WriteLine("修改后");
          Debug.WriteLine(
    " 行状态是:" + myRow.RowState.ToString());
          Debug.WriteLine(
    " 该行CompanyName字段Original行状态是:" + myRow["CompanyName",DataRowVersion.Original]);
          Debug.WriteLine(
    " 该行CompanyName字段Current行状态是:" + myRow["CompanyName",DataRowVersion.Current]);

          
    //确认修改
          myRow.AcceptChanges();

          
    //输出确认修改后的行状态和行版本

          Debug.WriteLine(
    "确认修改后");
          Debug.WriteLine(
    " 行状态是:" + myRow.RowState.ToString());
          Debug.WriteLine(
    " 该行CompanyName字段Original行状态是:" + myRow["CompanyName",DataRowVersion.Original]);
          Debug.WriteLine(
    " 该行CompanyName字段Current行状态是:" + myRow["CompanyName",DataRowVersion.Current]);
    }
    上边代码的运行结果如下:
    输出结果修改前:
      行状态是:Unchanged
      该行CompanyName字段Original版本值是:Alfreds Futterkiste
      该行CompanyName字段Current版本值是:Alfreds Futterkiste
    修改后:
      行状态是:Modified
      该行CompanyName字段Original版本值是:Alfreds Futterkiste
      该行CompanyName字段Current版本值是:cnblogs.com
    确认修改后:
      行状态是:Unchanged
      该行CompanyName字段Original版本值是:cnblogs.com
      该行CompanyName字段Current版本值是:cnblogs.com
    由于DataSet的这一缓存机制,因此,在修改完毕后必须使用AcceptChages()确认修改或使用RejectChanges()拒绝修改才能真正生效!
  • 相关阅读:
    linux 清空文件内容命令
    优秀的java 社区
    vue强制刷新组件 ----组件重置到初始状态
    function的json对象转换字符串与字符串转换为对象的方法
    js实现深度优先遍历和广度优先遍历
    Egg.js中使用sequelize事务
    JavaScript ES6 数组新方法 学习随笔
    eggjs的参数校验模块egg-validate的使用和进一步定制化升级
    Node.js 服务端图片处理利器
    webp图片实践之路
  • 原文地址:https://www.cnblogs.com/tangself/p/1911555.html
Copyright © 2020-2023  润新知