你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / Linux开发
也谈 .NET2.0中避免分布式事务(2)
 
在操作同一个数据库的时候,如果要高效的使用 TransactionScope,必须保证 SqlConnection 不改变,即用同一个 SqlConnection 来完成所需要的增加删除,或修改。我想写这样的代码进行事务控制:

public int UpdateTest(OutSourcing outSourcing, BusinessAccept businessAccept)
{
 IDataAccess dac = DataAccess.Create();
 DAHelper myHelper = new DAHelper(dac);
 using (TransactionScope ts = new TransactionScope())
 {
  myHelper.Update(outSourcing);
  myHelper.Update(businessAccept);
  ts.Complete();
 }
}

  这样就需要,执行第一个操作时候打开数据库连接,执行,不关闭连接,然后执行第二个操作,执行完关闭。显然,我想让 TransactionScope 在 实行 Dispose() 方法的时候关闭数据库连接。using 代码块的本质上等同于 try{}finally{} 语句代码块。为什么不封装一下 TransactionScope 让它满足自己的要求呢?

/**//// <summary>
/// TransactionScope 包装类
/// </summary>
public sealed class Scope : IDisposable
{
 private TransactionScope m_TransactionScope = null;
 /**//// <summary>
 /// 测试访问类
 /// </summary>
 private DataAccessTest m_DataAccessTest = null;
 /**//// <summary>
 /// 实例化一个新的 TransactionScope
 /// </summary>
 /// <param name="dac"></param>
 public Scope(DataAccessTest dac)
 {
  this.m_DataAccessTest = dac;
  //告诉访问类 你已经使用了事务
  dac.SetScope(this);
  this.m_TransactionScope = new TransactionScope();
 }
 /**//// <summary>
 /// 发出事务结束命令
 /// </summary>
 public void Complete()
 {
  this.m_TransactionScope.Complete();
 }
 IDisposable 成员#region IDisposable 成员
 /**//// <summary>
 /// 当执行该方法的时候完成两件任务
 /// 1 关闭数据库栀湩???? ??魀?(连接
 /// 2 调用 TransactionScope 的 Dispose()方法
 /// </summary>
 void IDisposable.Dispose()
 {
  try
  {
   m_DataAccessTest.Close();
  }
  finally
  {
   m_TransactionScope.Dispose();
  }
 }
 #endregion
}

  数据库访问类代码如下:

(编辑:aniston)

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089