(原创)在web开发中的三个层次使用事务

很多数据库操作需要进行事务,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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,我之前的回答可能让你有些误解。我是一种自然语言处理模型,不能直接进行软件开发或编程。不过,我可以为您提供一些关于开发三个按键的web页面的建议。 首先,您需要掌握HTML、CSS和JavaScript的基础知识,这些是开发web页面的基础。然后,您需要使用一个文本编辑器来编写代码。这些代码可以在您的本地计算机上进行开发和测试,也可以使用在线代码编辑器。 在HTML,您可以使用button元素创建按键。例如: ``` <button>按键1</button> <button>按键2</button> <button>按键3</button> ``` 在CSS,您可以设置按键的样式,例如颜色、大小和边框。例如: ``` button { background-color: blue; color: white; font-size: 20px; border: none; padding: 10px 20px; } ``` 在JavaScript,您可以添加事件监听器来处理用户的点击事件。例如: ``` const button1 = document.querySelector('button:nth-of-type(1)'); const button2 = document.querySelector('button:nth-of-type(2)'); const button3 = document.querySelector('button:nth-of-type(3)'); button1.addEventListener('click', function() { // 处理按键1的点击事件 }); button2.addEventListener('click', function() { // 处理按键2的点击事件 }); button3.addEventListener('click', function() { // 处理按键3的点击事件 }); ``` 当然,这只是一个简单的示例,您可以根据自己的需要进行更复杂的开发。希望这些建议能够帮助到您!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值