• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

在web开发中的三个层次使用事务(C#编程)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
很多数据库操作需要进行事务,Asp.net下面进行事务大致有3个层次: 
(1)存储过程层次的事务 
(2)Ado.Net层次的事务 
(3)Asp.Net页面层次的事务 
下面分别举例: 
首先建立trantest表,字段id(int),test(char) 
为id设置主键(利用主键是不允许重复的特性进行事务测试) 
假设数据库内存在记录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  表示遇到错误立即回滚
当然你也可以这么写
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; 

随便建立一个按钮,在按钮中进行如下操作:
try 

 work1(); 
 work2(); 
 ContextUtil.SetComplete(); 

catch(System.Exception except) 

 ContextUtil.SetAbort(); 
 Response.Write(except.Message); 


然后在页面中添加2个操作,模拟一下在逻辑层调用不同类中的操作的情况 
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(); 
  } 

修改前台页面在<%Page后面添加 Transaction="Required" 即可
以上是我个人在实际工作中总结的一些经验,好不好还需要大家的评论了,其中如有不足的地方,还希望大家能帮我指出.

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
在C#中使用LOG4NET(winform程序发布时间:2022-07-18
下一篇:
C#委托delegate的基本用法发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap