事务处理

本文深入解析了事务在校园教务系统中的作用,解释了事务的概念、特性及其在业务逻辑层的使用方式。重点阐述了事务如何确保数据库操作的一致性和完整性,通过SQLTransaction实现了事务的启动、保存点的创建与回滚,同时介绍了不同隔离级别的事务机制,最后通过一个具体的事务操作实例进行了详细说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在校园教务系统中,这次我们做的时候涉及到了事务,刚开始时听到事务根本不明白事务是什么东东,以前就没有听过。事务是对于多个操作同时访问并修改数据库的时候的一个执行单元,事务放

在业务逻辑层(BLL)的一个业务中,如果一个业务逻辑层涉及到多次对数据库的操作,那么久可以把这一个业务放到一个事务中,当做一个执行单元。

事务是为了防止在一个完整的业务中,有多个数据操作,如果其中一个没有顺利完成那么这个业务就没有完成,而有些已经写入数据库,而其他的没有对数据库修改,这样的话,这个业务就不完整,不能达到我们这个业务的功能。

所以我们在BLL层中使用事务来对我们的业务进行统一为一个执行单元,这样可以防止一个完整业务中的某个操作没有实现,如果其中一个操作出错,那么让事务回滚,即是让这个业务操作返回初始

状态,不让其他成功的操作在数据库中执行,这样就保证了业务的完整性。

事务具有4个属性:原子性、一致性、隔离性、持续性。这四个属性通常称为ACID特性。   

<A>原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。   

<B>一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密 切相关的。   

<C>隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。  

< D>持久性(durability)指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

1)SqlTransaction

<A> 由数据连接启动事务

<B> 由事务对象创建保存点,回滚或者提交.

<C> 事务回滚或提交后代表事务结束!

2) 事务的隔离机制:

<A> IsolationLevel.ReadCommittedSQLSERVER的默认机制. 这种机制可以确保只有第一个事务完成后,第二个事务才会开始.

<B> IsolationLevel.ReadUncommitted 即使第一事务没有完成,也允许另一个事务从数据库中读取数据.

<C> IsolationLevel.RepeatableRead 是ReadCommitted的一种扩展. 如果在事务处理中使用了相同的语句,无论是否存在其他潜在的数据库更新,总是可以返回相同的数据.

<D> IsolationLevel.Serializable 最高级的事务处理机制,不建议使用! 对数据可以进行串行化访问.

事务的过程

//string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString; //SqlConnection conn = new SqlConnection(connStr); //conn.Open(); 创建事务 //SqlTransaction tran = conn.BeginTransaction(); 关于事务的操作: tran.Commit();//提交事务; tran.Rollback();//回滚事务; tran.Save("保存点");//创建保存点; tran.Rollback("保存点");//回滚到某个保存点! //conn.Close(); //一个事务操作的例子: string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString; SqlConnection conn = new SqlConnection(connStr); conn.Open(); //打开连接 SqlTransaction tran = conn.BeginTransaction(IsolationLevel.ReadCommitted); string sql = "update students set sal = 9999 where sno = 2007089"; SqlCommand comm = new SqlCommand(sql,conn,tran); if (comm.ExecuteNonQuery() > 0) { Response.Write("成功!"); tran.Commit(); //提交事务 } else { Response.Write("失败!"); tran.Rollback(); //事务回滚 } conn.Close();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值