注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

汇总技巧

你快乐我快乐.... 汇集各类技巧,传播技巧,让我们共同熟练运用技巧..

 
 
 

日志

 
 

在web开发中的三个层次使用事务  

2011-05-30 18:33:37|  分类: ◆ASP技巧 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 很多数据库操作需要进行事务,Asp.net下面进行事务大致有3个层次: (1)存储过程层次的事务 (2)Ado.Net层次的事务 (3)Asp.Net页面层次的事务 下面分别举例: 首先建立trantest表,字段id(int),test(char) 为id设置主键(利用主键是不允许重复的特性进行事务测试) 假设数据库内存在记录id=1,test='test' (1) CREATEPROCEDURETran1 as begintran setxact_aborton InsertIntotrantest(id,test)values(1,'test') InsertIntotrantest(id,test)values(2,'test') committran GO set xact_abort on 表示遇到错误立即回滚 当然你也可以这么写 CREATE PROCEDURE tran1 as begin tran insert into trantest(id,test)values(1,'test') if@@error0) rollback tran else begin insert into trantest(id,test)values(2,'test') if@@error0) rollback tran else commit tran end GO (2) SqlConnectionconn=newSqlConnection(System.Configuration.ConfigurationSettings.AppSettings[conn]); SqlCommandcmd1=newSqlCommand(InsertIntotrantest(id,test)values(1,'test'),conn); SqlCommandcmd2=newSqlCommand(InsertIntotrantest(id,test)values(1,'test'),conn); conn.Open(); SqlTransactiontran=conn.BeginTransaction(); cmd1.Transaction=tran; cmd2.Transaction=tran; try { cmd1.ExecuteNonQuery(); cmd2.ExecuteNonQuery(); tran.Commit(); } catch(SqlExceptionexcept) { tran.Rollback(); Response.Write(except.Message); } finally { conn.Close(); } (3) 添加引用System.EnterpriseServices.dll usingSystem.EnterpriseServices; 随便建立一个按钮,在按钮中进行如下操作: try { work1(); work2(); ContextUtil.SetComplete(); } catch(System.Exceptionexcept) { ContextUtil.SetAbort(); Response.Write(except.Message); } 然后在页面中添加2个操作,模拟一下在逻辑层调用不同类中的操作的情况 privatevoidwork1() { SqlConnectionconn=newSqlConnection(System.Configuration.ConfigurationSettings.AppSettings[conn]); SqlCommandcmd1=newSqlCommand(InsertIntotrantest(id,test)values(1,'test'),conn); conn.Open(); cmd1.ExecuteNonQuery(); conn.Close(); } privatevoidwork2() { SqlConnectionconn=newSqlConnection(System.Configuration.ConfigurationSettings.AppSettings[conn]); SqlCommandcmd2=newSqlCommand(InsertIntotrantest(id,test)values(2,'test'),conn); conn.Open(); cmd2.ExecuteNonQuery(); conn.Close(); } 修改前台页面在%Page后面添加 Transaction=Required 即可
  评论这张
 
阅读(46)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017