博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在web开发中的三个层次使用事务
阅读量:6388 次
发布时间:2019-06-23

本文共 2114 字,大约阅读时间需要 7 分钟。

很多数据库操作需要进行事务,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" 即可
分类: 
本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/archive/2011/05/25/2056857.html,如需转载请自行联系原作者
你可能感兴趣的文章
Windows启动文件的详细介绍
查看>>
持久性session连接之memcached高可用方案
查看>>
curl用法:获取网站的header头及状态码
查看>>
Linux常用的基本命令02
查看>>
[cocos2d-x]图层的旋转缩放效果
查看>>
Java实现文件拷贝
查看>>
ExtJS4.2学习(八)表格限制输入数据的类型
查看>>
五个超酷Linux命令
查看>>
Hyper-v Server重复数据删除技术
查看>>
RUP大讲堂(第一讲):RUP简介及软件过程改进
查看>>
SQL2000中默认sa帐号改名和删除的最安全方法
查看>>
WEB应用数据验证指南
查看>>
redis的shell安装脚本,实现在linux下本机主从架构
查看>>
全国各省市直辖市软考机构联系方式(办公电话、网址、联系邮箱)
查看>>
自定义Spinner之IconSpinner
查看>>
软件视频会议Vidyo体验
查看>>
Activity平移动画
查看>>
使用主机ip地址绑定GooglAppEngine站点
查看>>
oracle重新启动步骤
查看>>
JavaScript 的同源策略
查看>>