理解DataSet的数据缓存机制

理解DataSet的数据缓存机制

Posted on 2006-02-10 20:26 i.Posei 阅读(2187) 评论(8)   编辑 收藏 网摘 所属分类: 数据库相关

虽然在以前的开发中经常使用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]);
}
由于DataSet的这一缓存机制,因此,在修改完毕后必须使用AcceptChages()确认修改或使用RejectChanges()拒绝修改才能真正生效!
上边代码的运行结果如下:
输出结果 修改前:
  行状态是: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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值