zoukankan      html  css  js  c++  java
  • 理解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()拒绝修改才能真正生效!
  • 相关阅读:
    学习笔记Jmail收发邮件
    ModalPopup
    学习笔记:UpdatePanel控件
    转AjaxControlToolkit的安装与使用详解
    转linq中的Single()、First()、Take(1) LINQ 标准的查询操作符 排序 orderby、thenby、Take
    转Global.asax文件
    转<%%>、<%=%>、<%$%>、<%@%>的区别
    C++文件包含处理—#include
    GISer学习之道(转载)
    OSG中的示例程序简介
  • 原文地址:https://www.cnblogs.com/tangself/p/1911555.html
Copyright © 2011-2022 走看看