ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:516.23KB ,
资源ID:9097015      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9097015.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(NET事务.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

NET事务.docx

1、NET事务.net事务1- (SqlTransaction) 目录1. 概述2. 应用程序事务和数据库管理系统事务的区别1. 论述2. 数据的迁移3. 后期的维护4. 建议3. 代码1. OperateDataBase类2. main所在类控制台应用程序4. 应用SqlTransaction时三层架构中的代码分布5. 总结概述 .net开发程序中,使用事务的方法有4中,分别为:数据库管理系统中的事务(SQL代码) ;.net中的SqlTransaction;.net中的Com+事务;.net中的TransactionScope。 对于数据库管理系统中的事务和Com+事务,在这里就不讲,主要讲解

2、的为SqlTransaction和TransactionScope,本片博客讲解的是SqlTransaction,下一篇博客讲解TransactionScope,接下了接入我们本片博客的主题:SqlTransaction。应用程序事务和数据库管理系统事务的区别 论述 概述中已经讲解了.net开发中实现事务的几种方式,当然,如果我们从另一个角度上看,事务的实现就两种方式:应用程序事务和数据库管理系统事务。 应用程序事务是在应用程序中通过代码控制事务的开启,数据库管理系统的事务主要是通过书写存储过程来创建的,两种方式都可以实现事务,但是,从数据库的迁移和应用程序后期的维护上说,应用程序事务更好,当

3、然,凑够效率上说,事务写在数据库管理系统上更好,但是从它的缺点和现在计算机的硬件发展来说,显然它的这个优点不太突出了。 数据的迁移 事务写在数据库管理系统上时,如果你想将该数据库(MS SQL)搬迁到Oracle数据库管理系统上,那么其事务(存储过程)可能在Oracle中不兼容(系统提供的方法等不全部一样),但是,如果你将事务写在程序中就不存在这种情况。 后期的维护 用到事务的时候,最简单的也是多个表的操作(一个表的操作没有意义),意思就是说,事务的逻辑性很强,如果我们将事务写在数据库管理系统上,那么开发人员再看程序代码的时候,是无法清楚的了解事务内部的逻辑的,此时矛盾出现了,因为有时,我们维

4、护人员不得不去了解这种逻辑,这样的话,我们还要查看里面相应的T-Sql语句,是一个非常麻烦的过程,但是,如果我们将事务写在应用程序中,那么我们在看代码的过程中就已经把事务中的逻辑了解了,因为应用程序中事务的逻辑是通过应用程序代码 建议 那种不会学哪种,两种都不会,先学数据库中的事务,都会之后,用应用程序中的事务。代码 OperateDataBase类csharp view plaincopyprint?1. usingSystem;2. usingSystem.Collections.Generic;3. usingSystem.Linq;4. usingSystem.Text;5. usin

5、gSystem.Threading.Tasks;6. usingSystem.Data;7. usingSystem.Data.SqlClient;8. usingSystem.Configuration;9. 10. namespace事务.普通事务11. 12. publicclassOperateDataBase13. 14. #region创建SqlConnection15. publicSqlConnectionCreateSqlConnection()16. SqlConnectionsqlCon=newSqlConnection(ConfigurationManager.Conn

6、ectionStringsstrCon.ToString();17. sqlCon.Open();18. returnsqlCon;19. 20. #endregion21. 22. #region添加数据23. publicintExecute(SqlConnectionsqlCon,stringstrSql,SqlTransactiontran)24. SqlCommandsqlCmd=newSqlCommand(strSql,sqlCon,tran);25. returnsqlCmd.ExecuteNonQuery();26. 27. #endregion28. 29. using Sy

7、stem;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Data;using System.Data.SqlClient;using System.Configuration;namespace 事务.普通事务 public class OperateDataBase #region 创建SqlConnection public SqlConnection CreateSqlConnection() SqlConnect

8、ion sqlCon = new SqlConnection(ConfigurationManager .ConnectionStrings strCon.ToString (); sqlCon.Open(); return sqlCon; #endregion #region 添加数据 public int Execute(SqlConnection sqlCon,string strSql,SqlTransaction tran) SqlCommand sqlCmd = new SqlCommand(strSql, sqlCon, tran); return sqlCmd.ExecuteN

9、onQuery(); #endregion main所在类(控制台应用程序)csharp view plaincopyprint?1. usingSystem;2. usingSystem.Collections.Generic;3. usingSystem.Linq;4. usingSystem.Text;5. usingSystem.Threading.Tasks;6. usingSystem.Data.SqlClient;7. 8. namespace事务.普通事务9. 10. classProgram11. 12. staticvoidMain(stringargs)13. 14. O

10、perateDataBaseoperateDataBase=newOperateDataBase();15. using(SqlConnectionsqlCon=operateDataBase.CreateSqlConnection()16. 17. /开启事务18. SqlTransactiontran=sqlCon.BeginTransaction();19. stringstrSql1=insertintoDataTable1(id,name)values(21,张三);20. stringstrSql2=insertintoDataTable2(id,name)values(21,张三

11、);21. try22. 23. operateDataBase.Execute(sqlCon,strSql1,tran);24. operateDataBase.Execute(sqlCon,strSql2,tran);25. /提交事务26. tran.Commit();27. 28. catch(Exception)29. 30. /回滚事务31. tran.Rollback();32. 33. 34. 35. 36. 37. using System;using System.Collections.Generic;using System.Linq;using System.Text

12、;using System.Threading.Tasks;using System.Data.SqlClient;namespace 事务.普通事务 class Program static void Main(string args) OperateDataBase operateDataBase = new OperateDataBase(); using (SqlConnection sqlCon = operateDataBase.CreateSqlConnection() /开启事务 SqlTransaction tran = sqlCon.BeginTransaction();

13、string strSql1 = insert into DataTable1(id,name) values(21,张三); string strSql2 = insert into DataTable2(id,name) values(21,张三); try operateDataBase.Execute(sqlCon, strSql1, tran); operateDataBase.Execute(sqlCon, strSql2, tran); /提交事务 tran.Commit(); catch (Exception) /回滚事务 tran.Rollback(); 应用SqlTrans

14、action时,三层架构中的代码分布 上面的也讲到过,应用在一张表的事务几乎很少见,大多都是多张表,但是由于SqlTransaction的特殊性,事务的范围在连接对象内,所以,在三层架构中应用该类的时候,应该在B层进行事务的控制,B层给D的东西,多了一个数据库连接对象和事务对象,此时需要注意,数据库连接对象是在D层创建的,只不过他先返回到了B层。总结.NET分布式事务2-TransactionScop 目录1. 概述2. 开启DTC服务1. 方式一2. 方式二3. 设置MSDTC4. 防火墙设置5. 数据库管理系统设置6. 代码1. 控制台代码2. OperateDataBasecs类同一数据

15、库服务器不同数据库3. OperateDifferentDataBaseServercs不同数据库系统7. 简单原理的介绍8. 总结概述 SqlTransaction可以解决同一个数据库的事务控制,但是,不能解决不同数据库的事务控制,今天就说一说,这个的解决方法,即:TransactionScope的应用。 本篇博客的的思路就是先进行一些相应的配置(开启DTC服务,配置MSDTC,配置防火墙,配置数据库管理系统),然后再进行一个实例的展示(代码),最后进行简单原理的介绍和总结。 了解了本篇博客的流程和结构后,接下来就看相应具体的内容吧!开启DTC服务 方式一 计算机管理服务Distribute

16、d(分布式)Link Tracking Client属性开启 方式二 字符命令子界面输入:net start msdtc设置MSDTC 命令界面输入:dcomcnfg.exe(或者:控制面板管理工具组件服务)防火墙设置 有两种方法:1、直接关闭防火墙(不建议使用,以前数据库连接的时候这样干过);2、进行如下图的设置数据库管理系统设置 因为要实现多个数据库系统之间事务的控制,所以,数据库系统也需要做相应的设置,具体如下图。代码 下面是一个简单的Demo,实现了两个功能:1、同一数据库系统,不同数据库的事务控制;2、不同数据库系统的事务控制。 控制台代码csharp view plaincopyp

17、rint?1. usingSystem;2. usingSystem.Collections.Generic;3. usingSystem.Linq;4. usingSystem.Text;5. usingSystem.Threading.Tasks;6. usingSystem.Transactions;7. 8. namespace事务.分布式9. 10. classProgram11. 12. staticvoidMain(stringargs)13. 14. #region同一个数据库服务器,操作不同的数据库15. /using(TransactionScopetran=newTran

18、sactionScope()16. /17. /OperateDataBaseoperateDataBase=newOperateDataBase();18. /inti=operateDataBase.Execute1();19. /intj=operateDataBase.Execute2();20. /tran.Complete();21. /22. #endregion23. 24. #region不同的数据库服务器25. using(TransactionScopetran=newTransactionScope()26. 27. 28. OperateDifferentDataBa

19、seServeroperateDifferentDataBaseServer=newOperateDifferentDataBaseServer();29. inti=operateDifferentDataBaseServer.Execute1();30. intj=operateDifferentDataBaseServer.Execute2();31. tran.Complete();32. 33. #endregion34. 35. 36. using System;using System.Collections.Generic;using System.Linq;using Sys

20、tem.Text;using System.Threading.Tasks;using System.Transactions;namespace 事务.分布式 class Program static void Main(string args) #region 同一个数据库服务器,操作不同的数据库 /using (TransactionScope tran = new TransactionScope() / / OperateDataBase operateDataBase = new OperateDataBase(); / int i = operateDataBase.Execut

21、e1(); / int j = operateDataBase.Execute2(); / tran.Complete(); / #endregion #region 不同的数据库服务器 using (TransactionScope tran = new TransactionScope() OperateDifferentDataBaseServer operateDifferentDataBaseServer = new OperateDifferentDataBaseServer(); int i = operateDifferentDataBaseServer.Execute1();

22、 int j = operateDifferentDataBaseServer.Execute2(); tran.Complete(); #endregion OperateDataBase.cs类(同一数据库服务器,不同数据库)csharp view plaincopyprint?1. usingSystem;2. usingSystem.Collections.Generic;3. usingSystem.Linq;4. usingSystem.Text;5. usingSystem.Threading.Tasks;6. usingSystem.Data;7. usingSystem.Da

23、ta.SqlClient;8. usingSystem.Configuration;9. 10. namespace事务.分布式11. 12. publicclassOperateDataBase13. 14. privateSqlConnectionsqlCon1;15. privateSqlConnectionsqlCon2;16. privateSqlCommandsqlCom;17. 18. #region数据库系统1数据库1连接对象19. privatevoidGetConnection1()20. if(sqlCon1=null)21. 22. sqlCon1=newSqlConn

24、ection(ConfigurationManager.ConnectionStringsstrCon1.ToString();23. 24. if(sqlCon1.State=ConnectionState.Closed)25. 26. sqlCon1.Open();27. 28. 29. #endregion30. 31. #region数据库系统1数据库2连接对象32. privatevoidGetConnection2()33. if(sqlCon2=null)34. 35. sqlCon2=newSqlConnection(ConfigurationManager.ConnectionStringsstrCon2.ToString();36. 37. if(sqlCon2.State=ConnectionState.Closed)38. 39. sqlCon2.Open();40. 41. 42. #endregion43

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1