ADO.NET事务和Set Xact_Abort 以及MSDTC
ADO.NET中提供的SqlTransaction对象与我们在SP(存储过程)中显示的应用“Set Xact_Abort”语句来做事务处理是两种在不同层面对事务进行处理的方法。
首先可以肯定的是,如果不在SP中显示的调用“Set Xact_Abort”语句来做事务处理,ADO.NET中提供的SqlTransaction对象能够正常的处理事务,比如遇到错误进行回滚操作等。它们两者之间是让开发人员根据自己的业务需求从不同的层面和角度来选择自己的事务处理方式。SqlTransaction对象是允许我们在数据访问层进行事务处理,而“Set Xact_Abort”语句是让我们在数据库中进行事务处理,可以说两者是提供不同的方法,但却实现了同样的功能。两者最关键的区别我认为就是“事务边界”的不同了,使用“Set Xact_Abort”是使用T-SQL中的“BEGIN TRANSACTION”和“COMMIT/ROLLBACK TRANSACTION”语句来确定事务边界的,而使用SqlTransaction对象则是通过手动指定其边界的。当然,两者的性能也是有不同的,在SP中使用“Set Xact_Abort”的效率要高于使用SqlTransaction对象,但是在事务处理的灵活性和自由度上却不如SqlTransaction对象。
当然,具体选用那种事务处理方法要视我们具体的需求而定。
关于MSDTC与这两种事务操作的关系。MSDTC是我们自己根据业务需求编写的一个COM+的服务,最主要的用途是来进行不同数据源访问的事务处理工作。这点是上述两种事务处理方法所无法做到的。也就是说,如果我们的事务来自于两种或以上不同的数据源,那么我们应该使用MSDTC来进行事务处理。并且,使用MSDTC进行事务处理,我们可以很方便的重用该COM+服务,这也是上述两种方法所不能胜任的。
首先可以肯定的是,如果不在SP中显示的调用“Set Xact_Abort”语句来做事务处理,ADO.NET中提供的SqlTransaction对象能够正常的处理事务,比如遇到错误进行回滚操作等。它们两者之间是让开发人员根据自己的业务需求从不同的层面和角度来选择自己的事务处理方式。SqlTransaction对象是允许我们在数据访问层进行事务处理,而“Set Xact_Abort”语句是让我们在数据库中进行事务处理,可以说两者是提供不同的方法,但却实现了同样的功能。两者最关键的区别我认为就是“事务边界”的不同了,使用“Set Xact_Abort”是使用T-SQL中的“BEGIN TRANSACTION”和“COMMIT/ROLLBACK TRANSACTION”语句来确定事务边界的,而使用SqlTransaction对象则是通过手动指定其边界的。当然,两者的性能也是有不同的,在SP中使用“Set Xact_Abort”的效率要高于使用SqlTransaction对象,但是在事务处理的灵活性和自由度上却不如SqlTransaction对象。
当然,具体选用那种事务处理方法要视我们具体的需求而定。
关于MSDTC与这两种事务操作的关系。MSDTC是我们自己根据业务需求编写的一个COM+的服务,最主要的用途是来进行不同数据源访问的事务处理工作。这点是上述两种事务处理方法所无法做到的。也就是说,如果我们的事务来自于两种或以上不同的数据源,那么我们应该使用MSDTC来进行事务处理。并且,使用MSDTC进行事务处理,我们可以很方便的重用该COM+服务,这也是上述两种方法所不能胜任的。