- 热门文章:
- · (论坛答疑点滴)如何得知调用当前方法的方法名?
- · (论坛答疑点滴)用户控件动态加载PostBack后的问题
- · Implementing Cross-Browser Compatible Smart Navigation Features
- · ASP.NET立即上手教程 13(完)
- · 关于多层repeater,datagrid,datalist嵌套的示例
- · Display hierarchical data with TreeView
- · 怎么后台添加CheckBoxList并且得到选择结果
- · HTTP Downloader for Updater Application Block 2 (GotDotNet)
- · HOW TO:从资源管理器中拖放文件到控件
- · dataGrid在页面拖动(用表头),不刷新页面
- · winform下如何检测你一个给定的网址(Ull),是否可访问?
- · Abstract Factory pattern -- Structural example
上一篇:一个负载均衡问题的解决过程 >>
在web开发中的三个层次使用事务
(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" 即可
下一篇:(论坛答疑点滴)如何得知调用当前方法的方法名? >>
相关文章:
- · XML-RPC学习笔记(一)
- · [VS宏]根据函数名称定位函数
- · 三层式的层次划分
- · 服务器控件中js脚本注册方法
- · 复制文件夹所有内容和删除整个文件夹的2个函数
- · 动态绑定DATAGRID里的DropDownList
- · 彻底解决!无效的 CurrentPageIndex 值.它必须大于等于 0 且小于 PageCount!的问题
- · HOW TO:检索本机硬件信息
- · HOW TO:检索应用程序当前执行代码的引用信息
- · HOW TO:初始化共享变量
- · 怎么触发DataGrid模板列中控件的事件?
- · 刚学ASP.Net,学了个简单的计算器
- · 全选DataGrid里的复选框
- · WEB页面多语言支持解决方案
- · javascript 与 asp.net 的交互
- · 动态模板列更新数据分页的例子
- · DataList 控件分页操作
- · 如何用请求字符串传值给用模式窗口打开的aspx页面。
- · Duwamish7学习笔记1
- · Matt Powell的《Server-Side 异步Web Methhods》
- · DataGrid和DropDownList的一些配合以及使用css定制DataGrid
- · 轻松解决asp.net论坛中的一版块多斑竹和一用户担任多版块斑竹的问题(不用数组和split)
- · 分享:aspx页面javascript的几个trick
- · 2个页面间不通过Session与url的传值方式
- · Solidworks二次开发—09--添加配合参考
- · Solidworks二次开发—08--判断是什么特征
- · 创建动态数据输入用户界面
- · 可以代替窗体Refresh方法的函数
- · 无外部控件制作多媒体播放器(四)
- · 无外部控件制作多媒体播放器(三)
- · DirectX9 3D快速上手 3
- · AlertButton, 您确定要执行吗?
- · 无外部控件制作多媒体播放器(二)
- · 用TreeView显示数据通用方法
- · 无外部控件制作多媒体播放器(一)
- · Web Browser Express 概述
- · datagrid编辑删除分页
- · 展现C# 清单5.10 生成exe文件执行的问题
