考试系统之事务
事务在当初学习VB.NET时已经接触,但是迟迟没有使用,正好遇到考试系统这次锻炼机会,趁机使用了一把。
事务 事务(Transaction)是访问,更新数据库中的一个程序执行单元。事务通常由数据库语言或程序的执行所引起,事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。
事务是恢复和并发控制的基本单位,事务应该具有4个属性:原子性、一致性、隔离性、持久性,这四个属性通常称为ACID特性。
好吧,说的有点复杂,事务的目的很简单:你要做一系列的事,要么一口气全部完成;如果中间任何一项出错,大家全部恢复事务前的状态,话说有点“同生共死”的感觉。
不过这个恢复到以前的状态说的有点扯,并不是所有的都能恢复,我在文本框中输入了一些文字,点击按钮触发了一个事务,事务失败了,文本框自动清空了?当然不是,此处的“恢复”指的是对数据库操作的数据恢复。
咱接着说,既然是对数据库的恢复,必然离不开与SQL连接的关联,对,在C#编程语言中,谁和谁组成事务的依据就是数据库连接,也就是C#中的SqlConnection。
C#下的事务 考试系统中涉及到成绩转移,既然转移,必然涉及到数据的插入和删除两个步骤,所以在此处使用事务:当在历史表中插入某一条成绩数据成功时,在原数据表中删除该条记录。 因为UI层仅仅是传递一些实体数据,SqlHelper类也只是抽象出对数据库的一些操作,所以次数省略UI层类和SqlHelper类。BLL层 转移分数逻辑:先插入再删除。
USE BasicDataSystemSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Author:<李达>-- Create date: <2013年3月17日>-- Description:<成绩转移>-- =============================================CREATE PROCEDURE Proc_MoveScores-- 声明学号变量 @StudentCode varchar(50)ASBEGIN-- 启动事务BEGIN TRAN--添加一条成绩到历史表INSERT INTO TEH_ScoresHistory (StudentId) VALUES (@StudentCode)--删除该原成绩DELETE FROM TEB_Scores WHERE StudentId =@StudentCode --出现错误则回滚if @@ERROR <>0ROLLBACK TRAN--否则提交事务ELSECOMMIT TRANENDGO
当然这个事务例子比较简单,参与的逻辑也比较少,但是"麻雀虽小五脏俱全",再复杂的事务也是基于简单之上。
把握不变的,其它任它变。