Asp.Net事务和异常处理

添加人:yeemio零级(94分)   添加时间:2007-08-29    阅读次数:3453  收藏此教程
 
第一篇:Asp.Net安全性
学习MSDN的WEBCAST,感觉单纯看一遍意义不大,做个笔记,以备不时只需查找方便。代码部分本人在XP+VS2005+SQL2005测试通过,不过我是初学,请大家指教。
Asp.Net事务和异常处理:
一。什么是事务处理?
事务处理是一组组和成逻辑工作单元的数据库操作,虽然系统中可能会出错,但事务将控制和维护每个数据库的一致性和完整性。
如果在事务过程中没有遇到错误,事务中的所有修改都将永久成为数据库中的一部分,如果遇到错误,则不会对数据库进行任何修改。
二。事务处理过程。
1. 开始一个事务。进入“事务待命”状态。
2. 在“事务待命”状态,记录事务中改变的数据库记录。此改变不能直接改变数据库中的值,必须先用一个顺序的“事务日志”记录在一边。同时,对于要改变的原始记录加锁,让其它用户无法读和写。如果记录已经被其它事务加锁,则报错。
3. 在“事务待命”,如果用户给出commit transaction命令,则进入“事务拷贝”状态,拷贝所有加锁的记录成备份。
4. 上面3执行完,则进入“事务更新”状态,用“事务日志”中记录一一更新实际的数据库记录。
5. 上面4执行完,则进入“事务结束”状态,释放所有的记录锁,然后抛弃“事务日志”和备份的原数据库记录。
6. 上面5做完后,事务被删除。但是,最为关键的是,事务系统必须执行以下过程:一但数据库由于软件、硬件问题发生故障,重启动后,一旦有事务没正常删除,则:
7. 如果在“事务待命”、“事务结束”状态,则重新从5中结束事务的动作开始执行。
8. 如果在“事务更新”状态,则重新从4开始更新记录,并继续想下执行。结果,虽然系统崩溃过,但事务仍然能正常提交。
三。事务处理的有关事项
•事务处理的关键是在提交事务或者取消事务时,万一系统崩溃了,数据库在再次启动时,仍然需要保持数据可逻辑一致性。
• 应用中包含的事务应当尽量让它“瞬间”完成,避免在比较忙时造成用户进程的互锁。
• Informix、Oracle、DB2等数据库的实际事务处理流程更复杂,目的是具有更好的抵抗系统错误性质,因为事务保护是业务系统安全稳定的最后一道防线。

四。事务处理的方法
1,直接写入SQL。我们来看一个例子。新建一个表,具体过程我就不给出了,大家自己建,也就是达到测试地目的,有个用户名就可以。然后写存储过程:
 1create procedure [SqlAcTran] As
 2begin tran
 3declare @UserInfoError int 
 4delete from [SqlAction] where username='测试'
 5select @UserInfoError =@@error
 6if(@UserInfoError =0)
 7commit tran
 8else
 9rollback tran
10go
 
然后建立一个页面,页面简单之极,只用一个BUTTON来执行命令,然后对BUTTON编程,这里如果对连接语句不明白的话参考我的第一篇:Asp.Net安全性
 
 1using System;
 2using System.Data;
 3using System.Configuration;
 4using System.Collections;
 5using System.Web;
 6using System.Web.Security;
 7using System.Web.UI;
 8using System.Web.UI.WebControls;
 9using System.Web.UI.WebControls.WebParts;
10using System.Web.UI.HtmlControls;
11using System.Data.SqlClient;
12
13namespace WebApplication1
14{
15    public partial class SqlAction : 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            SqlCommand com = new SqlCommand();
28            com.Connection = con;
29            com.CommandType = CommandType.StoredProcedure;
30            com.CommandText = "SqlAcTran";
31            com.ExecuteNonQuery();
32            con.Close();
33
34        }

35    }

36}


3页 第1上一页123下一页
相关的教程: ASP.NET
收藏此教程

当前平均分: 0.0(0 次打分)

-5-4-3-2-1012345
评论主题
您的大名
您的评论
验证码 点击换一个验证码
知识库搜索: