ASP.NET 3.5(C#)系列3-新一代事务机制
2011-02-13 04:13
405 查看
事物这个概念已经接触过。在旧的ADO.NET事务机制中,我们需要这样做:
1:显示声明一个SqlTransaction对象。
2:在SqlConnection中调用SqlTransaction对象。
3:在SqlCommand中使用SqlTransaction对象。
4:结束后显示进行Commit()或者RollBack()操作。
这种方式的优点:简单,速度快
这种方式的缺点:只能管理单一的SqlConnection对象和单一事务管理。对多个SqlConnection和分布式事务无能为力。
在新的ASP.NET3.5事务机制中,依然沿用了2.0的System.Transaction命名空间,只是更强大。
System.Transaction中有两大类:
1.隐式事务编写
TransactionScope类;
2.显示事务编写
Transaction类;
CommittableTransaction类;
1)什么是隐式事务?
答:隐式事务是SQL Server为你而做的事务.隐式事务又称自动提交事务。
隐式事务使用TransactionScope类,编写方便简单,所以优先考虑,若不行,再用显示事务编写。
用法:首先在项目中加入System.Transactions组件(在项目中添加引用),然后在程序中引用 using System.Transactions 命名空间,这样才能访问事务相关功能。语法如下:
例:将刚才的例子用TransactionScope类重写
2)什么是显示事务?
答:显示事务是一种由你自己指定的事务.这种事务允许你自己决定哪批工作必须成功完成,否则所有部分都不完成。显示事务必须明确指出Begin(开始),Commit(确认事务结束),Rollback(错误回滚操作)。
显示事务用CommittableTransaction类,他继承自Transaction类。语法如下:
例:将刚才的例子用CommittableTransaction类重写
这个例子中Sqlconnection的EnlistTransaction方法非常重要,少了它事务将不会发生正常作用。
3)到底选择哪种事务机制?
答:优先选择隐式事务,因为快速方便,且并不需要进行太多的事务应用。当有特定需求,如需要自行决定Commit或Rollback时机时,才用显示事务。
SqlConnection conn = new SqlConnection(); conn.Open(); SqlTransaction tran = conn.BeginTransaction(); //显示声明开始建立事物Transaction string sqlString ="xxxxxx"; SqlCommand cmd = new SqlCommand(sqlString, conn, tran); //建立SqlCommand,并引入Transaction try { cmd.ExecuteNonQuery(); tran.Commit(); //成功,事物结束 } catch { tran.Rollback(); //有错误,事物回滚 }
1:显示声明一个SqlTransaction对象。
2:在SqlConnection中调用SqlTransaction对象。
3:在SqlCommand中使用SqlTransaction对象。
4:结束后显示进行Commit()或者RollBack()操作。
这种方式的优点:简单,速度快
这种方式的缺点:只能管理单一的SqlConnection对象和单一事务管理。对多个SqlConnection和分布式事务无能为力。
在新的ASP.NET3.5事务机制中,依然沿用了2.0的System.Transaction命名空间,只是更强大。
System.Transaction中有两大类:
1.隐式事务编写
TransactionScope类;
2.显示事务编写
Transaction类;
CommittableTransaction类;
1)什么是隐式事务?
答:隐式事务是SQL Server为你而做的事务.隐式事务又称自动提交事务。
隐式事务使用TransactionScope类,编写方便简单,所以优先考虑,若不行,再用显示事务编写。
用法:首先在项目中加入System.Transactions组件(在项目中添加引用),然后在程序中引用 using System.Transactions 命名空间,这样才能访问事务相关功能。语法如下:
//声明TransactionScope隐式事务 using (TransactionScope Ts = new TransactionScope()) { //ADO.NET程序 Ts.Complete(); }
例:将刚才的例子用TransactionScope类重写
string connString = "xxxx"; SqlConnection conn = new SqlConnection(connString); string sqlString = "xxxxxx"; SqlCommand cmd = new SqlCommand(sqlString, conn); using (TransactionScope Ts = new TransactionScope()) //将TransactionScope类建立在一个using块内 { conn.Open(); //所有ADO.NET操作放在using块中 try { cmd.ExecuteNonQuery(); Ts.Complete(); //显示说明事务完成 } catch (Exception ex) { Response.Write(ex.Message); //不用显示声明,发生错误自动进行回滚操作 } finally { conn.Close(); } }
2)什么是显示事务?
答:显示事务是一种由你自己指定的事务.这种事务允许你自己决定哪批工作必须成功完成,否则所有部分都不完成。显示事务必须明确指出Begin(开始),Commit(确认事务结束),Rollback(错误回滚操作)。
显示事务用CommittableTransaction类,他继承自Transaction类。语法如下:
using (CommittableTransaction tran = new CommittableTransaction()) //将CommittableTransaction类建立在一个using块中 { conn.Open(); //所有ADO.NET操作放在using块中 conn.EnlistTransaction(tran); //显示加入事务 try { //ADO.NET操作 tran.Commit(); //确认事务完成 } catch { tran.Rollback(); //事务回滚操作 } }
例:将刚才的例子用CommittableTransaction类重写
using (CommittableTransaction tran = new CommittableTransaction()) { conn.Open(); conn.EnlistTransaction(tran); //加入显示事务 try { //ADO.NET操作; tran.Commit(); //确认事务完成 } catch { tran.Rollback(); //事务回滚操作 } }
这个例子中Sqlconnection的EnlistTransaction方法非常重要,少了它事务将不会发生正常作用。
3)到底选择哪种事务机制?
答:优先选择隐式事务,因为快速方便,且并不需要进行太多的事务应用。当有特定需求,如需要自行决定Commit或Rollback时机时,才用显示事务。
相关文章推荐
- ASP.NET 3.5(C#)系列3-新一代事务机制II-并发事务级别
- ★★★【庖丁解牛:纵向切入Asp.net 3.5控件和组件开发技术系列—(5)事件和数据回发机制】★★★
- ASP.NET 3.5(C#)系列1-初探ASP.NET 3.5
- ★★★【庖丁解牛:纵向切入Asp.net 3.5控件和组件开发技术系列—(6)页面状态机制(视图状态和控件状态)】★★★
- ASP.NET 3.5(C#)系列2-C# 3.0语言新功能介绍
- ASP.net(c#)+MySql 事务的使用方法
- Beginning ASP.NET 3.5 in C# 2008 From Novice to Professional Second Edition(ASP.NET 3.5(C#2008)入门 )翻译
- C#,asp.net实现邀请码机制
- (一)庖丁解牛Asp.net3.5控件和组件开发技术系列—服务器控件开发中的调试技术-郑健
- C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理
- C#温故而知新学习系列之.NET运行机制—.NET中托管代码是指什么?(三)
- ★★★【庖丁解牛:纵向切入Asp.net 3.5控件和组件开发技术系列—教程索引】★★★
- asp.net 使用事务机制
- Beginning ASP.NET 3.5 in C# 2008 From Novice to Professional Second Edition(ASP.NET 3.5(C#2008)入门 )翻译-第十章(2)
- ★★★【庖丁解牛:纵向切入Asp.net 3.5控件和组件开发技术系列—(1)读者序】★★★
- ASP.NET 3.5核心编程学习笔记(12):SqlCommand、SqlDataReader、事务
- Asp.Net 3.5 应用Linq的例子1(C#)以及Web.Config示例
- ASP.NET 3.5(c#)区域化设置(LCID)
- ASP.NET 2.0(C#)系列文章索引
- [学习笔记]Asp.net(C#)菜鸟进级系列之引用类型