程序中事务控制相关
第一次学习数据库访问时,事务的控制基本很简单,大概代码如下:
public class ExampleStep1
{
DbConnection GetConnection()
{
return new OracleConnection(ConfigurationManager.ConnectionStrings["connectionstring"].ConnectionString);
}
public void Excute()
{
using (DbConnection con = this.GetConnection())
{
con.Open();
DbTransaction transaction = con.BeginTransaction();
try
{
transaction.Commit();
}
catch
{
transaction.Rollback();
}
con.Close();
}
}
}
但是在业务系统中,我们不可能把所有的业务放在一个数据访问接口里面,实际情况是多个数据访问接口的相互协作,即多个接口同在一个服务接口里面,但是这些接口必须在同一个事务里面,简单的方式就是在业务里面启动事务,因为事务是和数据库连接一起的,所以可以把数据库连接和事务控制放在服务接口里面(当然可以使用委托来实现),
public class ExampleStep2
{
DbConnection GetConnection()
{
return new OracleConnection(ConfigurationManager.ConnectionStrings["connectionstring"].ConnectionString);
}
public void Excute()
{
using (DbConnection con = this.GetConnection())
{
con.Open();
DbTransaction transaction = con.BeginTransaction();
try
{
Opt1(con);
Opt2(con);
transaction.Commit();
}
catch
{
transaction.Rollback();
}
con.Close();
}
}
private void Opt1(DbConnection con)
{
}
private void Opt2(DbConnection con)
{
}
}
但是这种业务逻辑里面参杂事务的做法似乎不合时宜,于是里面会想到TransactionScope,他可以不关联数据库连接,这样可以把事务从数据库的管理剥离出来
public class ExampleStep3
{
DbConnection GetConnection()
{
return new OracleConnection(ConfigurationManager.ConnectionStrings["connectionstring"].ConnectionString);
}
public void Excute()
{
using (TransactionScope scope = new TransactionScope())
{
Opt1();
Opt2();
scope.Complete();
}
}
private void Opt1()
{
using (DbConnection con = this.GetConnection())
{
con.Open();
//
con.Close();
}
}
private void Opt2()
{
using (DbConnection con = this.GetConnection())
{
con.Open();
//
con.Close();
}
}
}
尽管现在可以很好的在服务接口控制事务了,但是对于一个纯业务的接口而言,事务似乎也略显多余,如果能够从业务里面剥离事务的控制,但是这种代码基本覆盖所有涉及到数据访问的服务接口,aop是实现这种控制的一个方法之一。spring.net的事务控制也是基于此方式的。
引用:
像TransactionScope一样使用DbTransaction
Java Transaction Design Strategies
分享到:
相关推荐
springMVC框架事务控制,保证业务操作的完整性 防止在一些意外(例如说突然断电)的情况下出现乱数据,防止数据库数据出现问题。 如:银行转帐。A账户减少的钱要加到B账户上,若A这边减了钱,B那边却还是一样的数,这...
行政事务管理改进控制程序图.docx
事务所质量控制制度程序与方法.ppt
某会计师事务所质量控制程序文件.doc
C#中的事务处理例子程序,适合初学者,可以直接用,在数据库的同步控制上很有用
房地产公司行政事务管理改进控制程序图
事务所质量控制:制度、程序与方法.ppt
如何使用AS400 中RPGLE 的事务控制操作与隔离级别
基于微信小程序的家庭事务管理系统结合了微信小程序前端和SSM(Spring + Spring MVC + MyBatis)框架后端,旨在帮助家庭成员高效地管理家庭事务和日常任务。以下是该系统的主要实现和功能描述: 微信小程序端: ...
可以统一调用 webservices,rmi,hessian服务。对于小型服务化应用,可以直接根据自己的需要使用。 只需要添加自己的服务,调用远程服务和本地服务一样方便。
数据操作 数据定义 数据控制 事务控制 程序化SQL 局部变量 ....
2 适用范围 本程序适用于信息安全管理体系中与信息系统有关的文件与资料,包括:信息安全管理 管理体系文件(含记录)、相关技术文件和资料,以及相关外来文件(各类标准、软件 、产品样本等)。 3 职责分工 3.1 ...
用spring AOP(包括几种常用的通知类型)做的小程序
数据操作 数据定义 数据控制 事务控制 程序化SQL 局部变量 全局变量 统计函数 算术函数 字符串函数 日期函数 系统函数 sql中的保留字
事务处理广泛地应用于数据库和操作系统领域,并在现代计算机系统中监控、控制和更新信息。本书向读者展示了大型的、分布的、异构的计算机系统是如何进行可靠工作的。作者使用事务作为基本概念,说明了在有限的资金和...
Mybatis连接池、事务控制和复杂查询相关的案例源码。包含详细注释。
"XXXX有限公司 " "控制状态: " " " " " " " " " " " " " "文件控制程序 " " " " " " " " " " " " " "文件编号: SJ/QP-001 " "文件版本: B " "生效日期: 2004.11.01 " "发文编号: " " " " " " " " " " " " " ...
程序一词来自生活,通常指完成某些事务的一 种既定方式和过程 在日常生活中,可以将程序看成对一系列动作 的执行过程的描述 计算机中的程序 算法 计算圆形的面积 流程图 流程图: 是人们对解决问题的方法、...
它可以保证任何时候都可以有多个正在运行的用户程序 ,但是所有用户程序都在彼此完全隔离的环境中运行。 一、 并发控制的预备知识 (一) 并发控制概述 并发控制是以事务(transaction)为单位进行的。 1. 并发控制的...
使用提出的模型,可以以无锁和无MVCC(多版本并发控制)的方式执行键值NoSQL数据库的事务。 这是对相关主题进行进一步研究的结果,填补了该领域相关学者所忽略的空白,为NoSQL技术的进一步发展做出了一点贡献。