• 理解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()拒绝修改才能真正生效!
  • 相关阅读:
    Spring使用Cache
    Spring AOP之切入点指示符
    centos下 php未安装posix扩展 安装phpsh导致的问题fix
    Linus:利用二级指针删除单向链表
    AngularJS学习之 ui router
    AngularJS学习之 angular-file-upload控件使用方法
    AngularJS学习之 登录表单 清爽验证(边学边更新)
    AngularJS图片上传功能实践
    JavaScript基础知识之 每日一题(网上搜罗来滴)
    AngularJS学习之 ngTable 翻页 功能以及利用angular service准备测试数据
  • 原文地址:https://www.cnblogs.com/chorrysky/p/1237693.html
Copyright © 2020-2023  润新知