很多數(shù)據(jù)庫(kù)操作需要進(jìn)行事務(wù),asp.net下面進(jìn)行事務(wù)大致有3個(gè)層次:  
(1)存儲(chǔ)過(guò)程層次的事務(wù)  
(2)ado.net層次的事務(wù)  
(3)asp.net頁(yè)面層次的事務(wù)  
下面分別舉例:  
首先建立trantest表,字段id(int),test(char)  
為id設(shè)置主鍵(利用主鍵是不允許重復(fù)的特性進(jìn)行事務(wù)測(cè)試)  
假設(shè)數(shù)據(jù)庫(kù)內(nèi)存在記錄id=1,test='test' 
(1)  
create procedure tran1  
as  
begin tran  
set xact_abort on 
insert into trantest (id,test)values(1,'test')  
insert into trantest (id,test)values(2,'test')  
commit tran  
go  
set xact_abort on  表示遇到錯(cuò)誤立即回滾 
當(dāng)然你也可以這么寫(xiě) 
create procedure tran1 
as 
begin tran 
insert into trantest(id,test)values(1,'test') 
if(@@error<>0) 
 rollback tran 
else 
 begin 
  insert into trantest(id,test)values(2,'test') 
  if(@@error<>0) 
   rollback tran 
  else 
   commit tran 
 end 
go 
(2)  
sqlconnection conn=new sqlconnection(system.configuration.configurationsettings.appsettings["conn"]);  
sqlcommand cmd1=new sqlcommand("insert into trantest (id,test)values(1,'test')",conn);  
sqlcommand cmd2=new sqlcommand("insert into trantest (id,test)values(1,'test')",conn);  
conn.open();  
sqltransaction tran=conn.begintransaction();  
cmd1.transaction=tran;  
cmd2.transaction=tran;  
try  
{  
 cmd1.executenonquery();  
 cmd2.executenonquery();  
 tran.commit();  
}  
catch(sqlexception except)  
{  
 tran.rollback();  
 response.write(except.message);  
}  
finally  
{  
 conn.close();  
}  
(3)  
添加引用system.enterpriseservices.dll  
using system.enterpriseservices;  
隨便建立一個(gè)按鈕,在按鈕中進(jìn)行如下操作: 
try  
{  
 work1();  
 work2();  
 contextutil.setcomplete();  
}  
catch(system.exception except)  
{  
 contextutil.setabort();  
 response.write(except.message);  
}  
然后在頁(yè)面中添加2個(gè)操作,模擬一下在邏輯層調(diào)用不同類(lèi)中的操作的情況  
private void work1()  
  {  
   sqlconnection conn=new sqlconnection(system.configuration.configurationsettings.appsettings["conn"]);  
   sqlcommand cmd1=new sqlcommand("insert into trantest (id,test)values(1,'test')",conn);  
   conn.open();  
   cmd1.executenonquery();  
   conn.close();  
  }  
  private void work2()  
  {  
   sqlconnection conn=new sqlconnection(system.configuration.configurationsettings.appsettings["conn"]);  
   sqlcommand cmd2=new sqlcommand("insert into trantest (id,test)values(2,'test')",conn);  
   conn.open();  
   cmd2.executenonquery();  
   conn.close();  
  }  
修改前臺(tái)頁(yè)面在<%page后面添加 transaction="required" 即可注冊(cè)會(huì)員,創(chuàng)建你的web開(kāi)發(fā)資料庫(kù),