.NET开发中的事务处理大比拼 之 SQL和存储过程级别事务

数据库事务是其他事务模型的基础,当一个事务创建时不同数据库系统都有自己的规则。 SQL Server 默认在自动提交的模式下工作,每个语句执行完后都会立即提交;与此对照的是 Oracle 需要你包含一个提交语句。但是当一个语句通过 OLE DB 执行时,它执行完后一个提交动作会被附加上去。例如:
DECLARE @TranName VARCHAR(20);
SELECT @TranName = 'MyTransaction';

BEGIN TRANSACTION @TranName;
GO
USE AdventureWorks;
GO
DELETE FROM AdventureWorks.HumanResources.JobCandidate
    WHERE JobCandidateID = 13;

GO 

 
COMMIT TRANSACTION MyTransaction;
GO
或者:
CREATE PROCEDURE Tran1  
as  
begin tran  
set xact_abort on 
Insert Into P_Category(CategoryId,Name)values('1','test1')  
Insert Into P_Category(CategoryId,Name)values('2','test2')  
commit tran  
GO
set xact_abort on 表示遇到错误立即回滚。
当然你也可以这么写:
CREATE PROCEDURE tran1 
as 
begin tran 
Insert Into P_Category(CategoryId,Name)values('1','test1')  
if(@@error<>0) 
 rollback tran 
else 
 begin 
  Insert Into P_Category(CategoryId,Name)values('2','test2')
  if(@@error<>0) 
   rollback tran 
  else 
   commit tran 
 end 
GO
数据库级别事务有它的优势和限制。
优势:
l  所有的事务逻辑包含在一个单独的调用中。
l  拥有运行一个事务的最佳性能。
l  独立于应用程序。
限制:
l  事务上下文仅存在于数据库调用中。
l  数据库代码与数据库系统有关。
 
选自 《亮剑.NET. .NET深入体验与实战精要》 一书 5.4 节。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值