首页
最近更新
热门教程
ASP.NET
开发语言
开发环境
AJax教程
控件开发
统计报表
数据库
Web服务
安装部署
HTML教程
Javascript
XML教程
Community Server
NHibernate
书籍推荐
常用工具
实用代码
教程全文搜索
首页
>>
ASP.NET
Asp.Net事务和异常处理
添加人:
yeemio
添加时间:2007-08-29 阅读次数:3645
收藏此教程
2,Ado.Net事务处理。
在ADO.NET 中,可以使用Connection 和Transaction 对象来控制事务。若要执行事务,请执行下列操作:
• 调用Connection 对象的BeginTransaction 方法来标记事务的开始。
• 将Transaction 对象分配给要执行的Command的Transaction 属性。
• 执行所需的命令。
• 调用Transaction 对象的Commit 方法来完成事务,或调用Rollback 方法来取消事务。
当然ADO.NET事务处理有优点和缺点,运用起来看具体情况了。
• 优点:
– 简单性
– 和数据据事务差不多的快
– 独立于数据库,不同数据库的专有代码被隐藏了
• 缺点:
– 事务不能跨越多个数据库连接
– 事务执行在数据库连接层上,所以需要在事务过程中维护一个数据库连接。
下边我们看一个例子,建立一个页面,同样简单,只需要一个按钮,然后编程:
1
using
System;
2
using
System.Data;
3
using
System.Configuration;
4
using
System.Collections;
5
using
System.Web;
6
using
System.Web.Security;
7
using
System.Web.UI;
8
using
System.Web.UI.WebControls;
9
using
System.Web.UI.WebControls.WebParts;
10
using
System.Web.UI.HtmlControls;
11
using
System.Data.SqlClient;
12
13
namespace
WebApplication1
14
{
15
public
partial
class
AdoAction : System.Web.UI.Page
16
{
17
protected
void
Page_Load(
object
sender, EventArgs e)
18
{
19
20
}
21
22
protected
void
btn_Click(
object
sender, EventArgs e)
23
{
24
SqlConnection con
=
new
SqlConnection();
25
con.ConnectionString
=
ConfigurationManager.ConnectionStrings[
"
DSN
"
].ConnectionString;
26
con.Open();
27
//
启动一个事务。
28
SqlTransaction myTran
=
con.BeginTransaction();
29
//
为事务创建一个命令,注意我们执行双条命令,第一次执行当然成功。我们再执行一次,失败。
30
//
第三次我们改其中一个命令,另一个不改,这时候事务会报错,这就是事务机制。
31
SqlCommand myCom
=
new
SqlCommand();
32
myCom.Connection
=
con;
33
myCom.Transaction
=
myTran;
34
try
35
{
36
myCom.CommandText
=
"
insert into SqlAction values ('测试2','111')
"
;
37
myCom.ExecuteNonQuery();
38
myCom.CommandText
=
"
insert into SqlAction values ('测试3','111')
"
;
39
myCom.ExecuteNonQuery();
40
myTran.Commit();
41
Response.Write(
"
成功执行
"
);
42
43
}
44
catch
(Exception Ex)
45
{
46
myTran.Rollback();
47
//
创建并且返回异常的错误信息
48
Response.Write(Ex.ToString());
49
Response.Write(
"
写入数据库失败
"
);
50
}
51
finally
52
{
53
con.Close();
54
}
55
56
}
57
58
59
}
60
}
3,COM+事务
一般的数据库事务控制要求事务里所做的操作必须在同一个数据库内,这样在出现错误的时候才能回滚(RollBack)到初始状态。这就存在一个问题,在分布式应用程序中,我们往往需要同时操作多个数据库,使用数据库本身的事务处理,很难满足程序对事务控制的要求。在COM+中,提供了完整的事务服务,我们可以利用它来完成在分布式应用程序中的事务控制。
创建参与自动事务的类:
1. 将TransactionAttribute 类应用于您的类,指定组件请求的自动事务类型。事务类型必须是TransactionOption 枚举的成员。
2. 从ServicedComponent 类派生您的类。ServicedComponent 是所有使用COM+ 服务
的类的基类。
3. 用强名称(strong name) 标记(sign) 程序集(assembly),确保程序集包含唯一的密钥对。
4. 在COM+ catalog 中注册包含您的类的程序集.
• 定义一个COM+事务处理的类
[Transaction(TransactionOption.Required)]
public class
DataAccess:System.EnterpriseServices.ServicedCo
mponent
{
}
• TransactionOption枚举类型支持5个COM+值
– Disabled 忽略当前上下文中的任何事务。
– NotSupported 使用非受控事务在上下文中创建组件。
– Required 如果事务存在则共享事务,并且如有必要则创建新事务。
– RequiresNew 使用新事务创建组件,而与当前上下文的状态无关。
– Supported 如果事务存在,则共享该事务。
强名称:
为使该组件正确运行,该组件必须有一个强名称。生成一个强名称,然后使用该强名称对程序集进行签名。为此,请按照下列步骤操作:
• 在命令提示符下,键入sn -k snEnterprise.snk 以创建一个密钥文件。
• 将snEnterprise.snk 复制到您的项目文件夹中。
• 在AssemblyInfo.vc 中,将以下代码添加到其他程序集属性语句之前或之后:[assembly:AssemblyKeyFileAttribute("..\\..\\snEnterprise.snk")]
• 进行保存,然后生成您的项目
• 使用regsvcs.exe将Dll注册到COM+ Services里面
注意事项:
• 确保使用COM+ 服务的所有项目都有一个强名称。
• 使用COM+ 服务的所有类都必须继承服务组件。服务组件位于System.EnterpriseServices 命名空间中。
• 进行调试时,事务在提交或终止前可能会超时。要避免出现超时,请在事务属性中使用一个超时属性。在面的示例中,在完成任何事务时,关联的方法在超时前都有1,200 秒的执行时间。
[Transaction(TransactionOption.Required,timeout:=1200)]
下边做例子,这是VS2005中的,我修改了一晚上才成功。。哭.写个数据库:
1
use
myDatabase
2
go
3
create
table
ComAction
4
(
5
userID
int
identity
,
6
userName
varchar
(
30
)
not
null
,
7
userScore
int
not
null
8
)
9
insert
into
ComAction
values
(
'
张三
'
,
100
)
首先我们建立一个类库prjEnterprise 添加引用System.EnterpriseService。 然后添加一个类clsEs
1
using
System;
2
using
System.Collections.Generic;
3
using
System.Text;
4
using
System.Data.SqlClient;
5
using
System.EnterpriseServices;
6
7
namespace
prjEnterprise
8
{
9
[Transaction(TransactionOption.Required)]
public
class
clsES:System.EnterpriseServices.ServicedComponent
10
{
11
public
SqlConnection Conn;
12
13
public
void
dbAccess(
int
pID1,
int
nScore)
14
{
15
try
16
{
17
SqlConnection Conn
=
new
SqlConnection(
"
user id=sa;password=;Initial Catalog=myDataBase;Data Source=.;
"
);
18
Conn.Open();
19
SqlCommand sqlCommand
=
new
SqlCommand(
"
UPDATE ComAction SET userScore =
"
+
nScore
+
"
WHERE userID =
"
+
pID1, Conn);
20
sqlCommand.ExecuteNonQuery();
21
22
ContextUtil.SetComplete();
23
Conn.Close();
24
}
25
catch
(Exception e)
26
{
27
ContextUtil.SetAbort();
28
29
throw
e;
30
}
31
finally
32
{
33
34
}
35
}
36
}
37
}
共
3
页 第
2
页
上一页
1
2
3
下一页
相关的教程:
ASP.NET
收藏此教程
Currently.-0.05/5
-5
-4
-3
-2
-1
0
1
2
3
4
5
当前平均分:
0.0
(
0
次打分)
-5
-4
-3
-2
-1
0
1
2
3
4
5
推荐阅读
从零开始学ASP.NET(基础篇)
单点登录在ASP.NET上的简单实现
利用ASP.NET AJAX实现表格更新程序
关于ASP.NET页面打印技术的总结
深入解析Asp.NET架构
提高ASP.Net应用程序性能的十大方法
Asp.net中防止用户多次登录的方法
ASP.NET网络编程中常用到的27个函数集
ASP.NET中的五个内置对象的详解
JAVA 和.NET在安全功能的比较
添加评论
评论主题
您的大名
您的评论
验证码
评论列表
ASP.NET论坛
|
网站帮助
|
加入收藏
知识库搜索:
用户信息
欢迎您,游客。
登录
|
注册
为什么要注册?
马上加入GotAspx,建立自己的知识库,与大家分享您的知识库,还可获得丰厚积分奖励!
本类热门
从零开始学ASP.NET(基础篇)
ASP.NET 2.0轻松实现数据库应用开发
ASP.NET 程序中常用的三十三种代码
GridView 72般绝技(一)
对初学者的建议:ASP.NET技术的学习顺序
单点登录在ASP.NET上的简单实现
ASP.NET数据库编程快速入门之技术慨述
ASP.NET 2.0中构造个性化网页
本类最新
介绍SubSonic【转】
ASP.NET访问XML的例子
WEB开发者版本级别
基于.NET2.0的System.Net.Mail发送邮件Demo
Asp.Net 文件操作基类(读取,删除,批量拷贝,批量删除,写入)
c#生成与 追加xml
一个复杂的Eval()绑定
将服务器上的一个.doc文档另存为到客户端