.net中事宜的使用
.net中事务的使用
上面的代码是B层的一个类的Add方法,它所实现的功能是将ArrayList中的所有数据全部添加入数据库。从中我们可以看出该函数中使用了事务。由于原系统采用的是,U层,B层,D层 + SqlHelper的架构,B层中不可以直接引用SqlHelper来获取链接,所以在D层新建了DBTransaction类,该类的GetConnection方法通过调用SqlHelper类的GetConn方法来简介获取链接。当然我们还可以在DBTransaction类中写一个与SqlHelper类中获取链接的相同方法来取得链接,只不过这样会有代码冗余。下面是DBTransaction类中的代码:
事务的原子性决定了事务必须彻底执行完毕,否则将全部回滚,由此在一定程度上解决了安全性问题。本文同时附有Sqlhelper类的代码,想要进一步研究的同学科点击这里进行下载。
事务简单来讲就是一组事情的集合,只有把这一组内的所有事情全部做完才能说完成了这个事务,如果在执行任意一件事情的过程中出现意外,则以前所做过的事情均恢复原样,就跟从来没发生过这件事一样。在编程中事务应用的非常广泛,而且在某些业务上必须要使用事务以应对可能出现的风险。一个典型的例子就是大家所熟悉的银行转账功能,转账简单来讲分为两步,第一步是从一个账户上减去需要转账的金额数目,第二步是向另外一个账户上增加转账金额。只有减去金额和增加金额都完成了我们才说这一事务执行完毕。我们可以想象如果没有加事务处理,当转账过程中只有第一步完成了,但是第二步没有完成便出现了意外这会是一件多么可怕的事情。既然事务这么重要,那事务具体怎样使用呢?下面亮出源码供大家参考:
public bool Add(ArrayList examNormTemplate) { //实例化一个DBTransaction对象 DBTransaction Db = new DBTransaction(); //获取连接 SqlConnection conn = Db.GetConnection(); //获取事务 SqlTransaction trans = Db.GetTransaction(conn); //定义一个布尔型变量 bool isUseExamTemplate = false; try { for (int i = 0; i < examNormTemplate.Count; i++) { ExamNormLinkEntity item = (ExamNormLinkEntity)examNormTemplate[i]; isUseExamTemplate = examMethod.Add(item, conn, trans); } //提交事务 Db.Commit(trans); } catch(Exception e) { //回滚事务 Db.Rollback(trans); throw e; } finally { //关闭连接 Db.Close(conn); } //返回执行结果,如果isUseExamTemplate的值为true说明设定成功,否则设置失败 return isUseExamTemplate; }
上面的代码是B层的一个类的Add方法,它所实现的功能是将ArrayList中的所有数据全部添加入数据库。从中我们可以看出该函数中使用了事务。由于原系统采用的是,U层,B层,D层 + SqlHelper的架构,B层中不可以直接引用SqlHelper来获取链接,所以在D层新建了DBTransaction类,该类的GetConnection方法通过调用SqlHelper类的GetConn方法来简介获取链接。当然我们还可以在DBTransaction类中写一个与SqlHelper类中获取链接的相同方法来取得链接,只不过这样会有代码冗余。下面是DBTransaction类中的代码:
public class DBTransaction { //定义一个SqlHelper私有变量 private SqlHelper SqlHelper = null; //当实例化该类的时候同时实例化一个Sqlhelper对象 public DBTransaction() { SqlHelper = new SqlHelper(); } /// <summary> /// 获取数据库连接 /// </summary> /// <returns></returns> public SqlConnection GetConnection() { return SqlHelper.GetCon(); } /// <summary> /// 获取事务 /// </summary> /// <returns></returns> public SqlTransaction GetTransaction(SqlConnection conn) { return conn.BeginTransaction(); } /// <summary> /// 提交事务 /// </summary> public void Commit(SqlTransaction sqlTransaction) { sqlTransaction.Commit(); } /// <summary> /// 回滚事务 /// </summary> public void Rollback(SqlTransaction sqlTransaction) { sqlTransaction.Rollback(); } /// <summary> /// 关闭连接 /// </summary> public void Close(SqlConnection conn) { if (conn.State == ConnectionState.Open) { conn.Close(); } } }
事务的原子性决定了事务必须彻底执行完毕,否则将全部回滚,由此在一定程度上解决了安全性问题。本文同时附有Sqlhelper类的代码,想要进一步研究的同学科点击这里进行下载。
- 3楼xiaokui00814小时前
- 基础
- 2楼lsh668823小时前
- sql事务
- 1楼lfmilaoshi前天 15:38
- 有比较深刻的认识