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月目录