.NET Framework 2.0 版中新增的 TransactionScope 单独使用确实很方便。但是在实际项目中都有自己的访问层,如何才能和自己的数据访问层结合起来使用呢? 
           在项目中我是这样处理数据的:

    }

上面 OutSourcing 为与表相对应的实体类 ;DAHelper 为作者自己实现的一个包装类,可以对任意实体进行增加,修改,删除 查询等功能。
  再贴一段代码:

也谈 .NET2.0  事务处理 TransactionScope 的使用:[在访问相同数据库时避免讨厌的分布式事务]   public int ExecSql(string strSql)
        }

我最终通过调用 ExecSql  方法来与数据库交互,而该方法会自己打开数据库连接,执行语句,然后关闭连接。
在操作同一个数据库的时候,如果要高效的使用 TransactionScope,必须保证 SqlConnection 不改变,即用同一个 SqlConnection 来完成所需要的增加
删除,或修改。我想写这样的代码进行事务控制:

也谈 .NET2.0  事务处理 TransactionScope 的使用:[在访问相同数据库时避免讨厌的分布式事务] public int UpdateTest(OutSourcing outSourcing, BusinessAccept businessAccept)
        }

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

数据库访问类代码如下:

}

赶快写个方法测试一下吧!


查看一下输入的结果
下面是使用事务的输出。。。。。。。。
 打开数据库连接;
执行 Sql 语句。。。
执行 Sql 语句。。。
 关闭数据库连接->该方法由 Scope中的Dispose()方法调用
*********************下面是  未  使用事务的输出。。。。。。。。
 打开数据库连接;
执行 Sql 语句。。。
 未使用事务 关闭数据库连接;
 打开数据库连接;
执行 Sql 语句。。。
 未使用事务 关闭数据库连接
;

输出结果和想像中的完全一样 数据库也正确(没任何原因不正确!)
最后 改变一下方法:

        }

熟悉数据库的肯定知道 “将截断字符串或二进制数据”吧!
输出结果为:
 下面是使用事务的输出。。。。。。。。
 打开数据库连接;
执行 Sql 语句。。。
执行 Sql 语句。。。
 关闭数据库连接->该方法由 Scope中的Dispose()方法调用
出现了异常????????????
数据库一条记录没有增加 数据库连接已经关闭  测试结果完全满意!
对自己访问层稍做修改:
最终的代码为:

也谈 .NET2.0  事务处理 TransactionScope 的使用:[在访问相同数据库时避免讨厌的分布式事务]   public int UpdateTest(OutSourcing outSourcing, BusinessAccept businessAccept)
        }

 

相关文章:

  • 2021-09-20
  • 2022-12-23
  • 2021-09-28
猜你喜欢
  • 2021-09-26
  • 2022-12-23
  • 2022-01-18
  • 2022-01-10
  • 2021-12-07
相关资源
相似解决方案