SQL 和存储过程级别的事务及ADO.NET级别的事务

 数据库事务是其他事务模型的基础,当一个事务创建时不同数据库系统都有自己的规
则。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

 

 

ADO.NET级别的事务

string  conString  =  "data  source=127.0.0.1;database=codematic;user  id=sa;
password=";
SqlConnection  myConnection  =  new  SqlConnection(conString);
myConnection.Open();
 
//启动一个事务
SqlTransaction  myTrans  =  myConnection.BeginTransaction();
 
//为事务创建一个命令
SqlCommand  myCommand  =  new  SqlCommand();
myCommand.Connection  =  myConnection;
myCommand.Transaction  =  myTrans;
try
{
        myCommand.CommandText  =  "update  P_Product  set  Name='电脑2'  where  Id=52";
        myCommand.ExecuteNonQuery();
        myCommand.CommandText  =  "update  P_Product  set  Name='电脑3'  where  Id=53";
        myCommand.ExecuteNonQuery();
       myTrans.Commit();//提交
        Response.Write("两条数据更新成功");
}
catch  (Exception  ex)

{
       myTrans.Rollback();//遇到错误,回滚
        Response.Write(ex.ToString());                  
}
finally
{
        myConnection.Close();
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值