牛腩快讯系统(三)——DAL层的开发之后

牛腩新闻系统(三)——DAL层的开发之后

        

        牛腩新闻系统(三)—DAL层的开发之后



   于DAL层的开发以后,开始编写BLL的代码,这次没有像机房收费系统那样,用了很多工

厂,设计模式,接口之类的.那时候就是为了学习.这次是为了使用,所以我们从使用出发.

用BLL直接调用DAL层的方法.而网站中只会出现两层:UI和BLL这样看起来比较清晰.

 

  我们基础信息模块,其中业务逻辑比较少,因为都是对数据库的基本增删改查.这样,其

中BLL代码量就不多.编写起来比较方便.其中对于新的东西.学到的不是很多.这次BLL主

要是对事务有了一定的了解.

 

  事务:通俗的说来就是一组操作,这些操作"要么什么也不做,要么都做完".事务反映了

现实世界中要以一个完整的单位提交的一份工作.比如:自动提款机取钱,减少余额,出钱

是两个独立的方法.但是这两个方法必须完整执行,或者全不执行.不能把余额减少了,钱

没有出来.显然,这样是不科学的.

 
事务处理起来分为两种:

  

  1、一种是在sql server中直接用sql语句编写.这样就像是存储过程一样,执行起来效

率较高.

牛腩快讯系统(三)——DAL层的开发之后



SQL事务处理有三个控制语句:


 Begin transaction 事务开始

 Commit transaction 事务提交
 Rollback transaction 事务回滚


一下注意事项:

(1):在sql server中,通常一个事务是以begintransaction开始,到一个匹配的

committransaction 或者 rollback transaction 之间所有的语句


(2):commit transaction 表示提交事务的一切操作,使得操作对数据的改变生效.


(3):rollback transaction 表示要撤销该事务提交的一切操作,回滚到事务开始的状态.


举例:

 [sql] view plaincopy
Begintransaction  
Insert Student values('01','张三')  
If @@error=0  
Commit  transaction  
Else  
Rollback transaction  
[sql] view plaincopy
  


 另一种处理事务的方法就是在.net中使用sqlTransacion 处理事务,利用.net定义好的

事务处理方法去处理.


其中:对于一个事务处理过程要经过这几个步骤:
          牛腩快讯系统(三)——DAL层的开发之后



(1):得到数据库连接字符串 ,打开连接
 
[csharp] view plaincopy
/// <summary>  
        /// 得到连接  
        /// </summary>  
        /// <returns></returns>  
        public SqlConnection GetConnection()  
        {  
            sqlConnection.ConnectionString =ConfigurationManager.ConnectionStrings["sqlconn"].ConnectionString;  
            sqlConnection.Open();  
            return sqlConnection;  
        }  
 


(2):开启事务:
 
[csharp] view plaincopy
/// <summary>  
/// 开启事务  
/// </summary>  
public SqlTransaction TranBegin()  
{  
    sqlTransaction =sqlConnection.BeginTransaction();  
    return sqlTransaction;  
}  


其中事务开启使用数据库连接对象sqlConnection 的beginTransaction()方法.


(3):执行要操作的方法

 这些放就是你要真正做的一个个的独立方法 比如:较少余额,出钱两个方法.其中这些方

法,执行的时候必须在数据库执行方法中指明是事务方法.比如:

[csharp] view plaincopy
sqlCommand.Transaction=实例化的事务名称  
然后执行:
sqlCommand.执行
其中这些方法使用Try catch 捕捉错误 如果发生错误,进入第5步,如果成功,
(4):如果成功 提交事务
 
[csharp] view plaincopy
/// <summary>  
/// 提交事务  
/// </summary>  
public void TranCommit()  
{  
    sqlTransaction.Commit();  
}  


(5):如果失败:回滚事务
[csharp] view plaincopy
/// <summary>  
/// 回滚事务  
/// </summary>  
public void TranRollback()  
{  
    sqlTransaction.Rollback();  
}  


(6):关闭数据库连接


[csharp] view plaincopy
sqlConnection.Close();  
[csharp] view plaincopy
  


小结:

   事务处理让让我们更方便的保持数据库的一致性.对于复杂的逻辑是更具高效性的。



4楼u013034889昨天 21:43
感觉那个回滚,提交,开启都是事务的属性,直接调用属性不可以吗?
3楼u013036959昨天 17:43
你总结的很细,我要多向你学习。
2楼u013034793昨天 14:39
你的博客量好大啊
1楼u013047584昨天 11:17
新生现在的技术博客越来越给力了,加油!