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()拒绝修改才能真正生效!
  • 相关阅读:
    从今天开始,逐步的把EverNote摘抄的笔记发送到这里来,也算是写博客的一个开始吧
    驾校一点通变身软考题库
    从公司去西站时间估算
    Android应用程序与JS双向调用
    操作系统为fedora17,安装Qt4.7.3,编译时找不到libpng12.so.0
    symbian 静默安装与静默删除(转)
    Symbian 利用Socket发送短信的源码(转)
    QT在vs2005平台下的安装与调试(转)
    c++中break的用法、continue的用法
    symbian入门系列 Windows C++ 程序员如何过度到Symbian C++ ?(转)
  • 原文地址:https://www.cnblogs.com/tangself/p/1911555.html
Copyright © 2011-2022 走看看