事务有很多种,看了一些关于事务的问题,这里做下笔记·····

事务时单个的工作单位。如果某一事务成功,则在该事务中进行的所有数据更改均会提交,成为数据库中永久的组成部分。若果事务遇到错误,则必须取消或回滚,所有数据均被更改清除。

属性:

1.原子性:事务是一个完整的操作,事务的各元素师不可分的。

2.一致性:事务开始时和完成时,数据必须处于一致的状态。

3.隔离性:对数据进行修改的所有并发事务是彼此隔离的。

4.持久性:事务完成后,它对系统的影响是永久的。

1.连接相关SqlTransaction事务

Transact-SQL使用下列语句来管理事务:

开始事务:BEGIN TRANSACTION

提交事务:COMMIT TRANSACTION

回滚:ROLLBACK TRANSACTION

private static void ExecuteSqlTransaction(string connstr){using (SqlConnection conn = new SqlConnection(connstr)){conn.Open();               using (SqlCommand cmd = conn.CreateCommand()){SqlTransaction transaction = conn.BeginTransaction("SampleTransaction"); //开始事务cmd.Connection = conn;cmd.Transaction = transaction;try{cmd.CommandText ="Insert into Department (ID, Name) VALUES (2, '开发部')";cmd.ExecuteNonQuery();cmd.CommandText ="Insert into Users(ID, Name,DepartmentID) VALUES (2, 'sxw',2)";cmd.ExecuteNonQuery();transaction.Commit(); //事务完成之后提交事务
                    }catch (Exception ex){transaction.Rollback(); //如果事务没有完成,就回滚事务
                    }}                               }}

注意:在提交或回滚 SqlTransaction 时,应始终使用 Try/Catch 进行异常处理。如果连接终止或事务已在服务器上回滚,则Commit 和Rollback 都会生成InvalidOperationException

虽然SqlTransaction事务应用很广泛,但SqlTransaction事务也有自己的缺点,就是不能实现分布式事务、嵌套事务、编写也麻烦。下面介绍能实现分布式事务的方法,编程相对来说还是很方便的

2.TransactionScope实现分布式事务

想在编程中使用TransactionScope实现分布式事务,

首先要在电脑服务中启动MSDTC(Distributed Transaction Coordinator)服务····

(注意:MSDTC服务只要把数据交互的电脑上的此服务打开就可以,如果是客户端直接访问服务器,则客户端和服务器的MSDTC服务都要打开,

如果客户端只是与中间层交互,中间层才与服务器数据交互,则客户端的MSDTC服务可以不用打开,但中间层和服务器的MSDTC服务必须启动。

在第一次启动MSDTC服务时,服务的启动类型都是手动启动,这是可以把启动类型改成自动启动,这样下次就不需要自己手动启动了)

其次需要在项目中添加对System.Transactions的引用

最后就可以在代码中引用TransactionScope的Complete方法。进行事务操作。

//使用事务保证原子性using (TransactionScope ts = new TransactionScope()){SqlHelp.ExecuteNonQuery("Insert into Department (ID, Name) VALUES (@Id, '开发部')",new SqlParameter("@Id", Id));SqlHelp.ExecuteNonQuery("Insert into Users(ID, Name,DepartmentID) VALUES (@Id, 'sxw',2)",new SqlParameter("@Id", Id));ts.Complete(); //完成事务,这个必须加上,要不然事务不会有效}

TransactionScope也可以实现嵌套式事务,也就是A调用B,B中声明了TransactionScope事务,A中也声明了,这样如果B没错,但是A调完B后出错,则B中的数据库操作也回滚。

转载于:https://www.cnblogs.com/sxw117886/p/5464512.html

c#传统SqlTransaction事务和TransactionScope事务相关推荐

  1. C#分布式事务(TransactionScope )

    TransactionScope是.Net Framework 2.0后,新增了一个名称空间.它的用途是为数据库访问提供了一个"轻量级"[区别于:SqlTransaction]的事 ...

  2. TransactionScope 事务使用说明

    TransactionScope是.Net Framework 2.0滞后,新增了一个名称空间.它的用途是为数据库访问提供了一个"轻量级"[区别于:SqlTransaction]的 ...

  3. TransactionScope事务简介

    在.NET 1.0/1.1 版本我们使用SqlTransaction.处理事务 string connString = ConfigurationManager.ConnectionStrings[& ...

  4. 【转】TransactionScope事务简介

    在.NET 1.0/1.1 版本我们使用SqlTransaction.处理事务 string connString = ConfigurationManager.ConnectionStrings[& ...

  5. TransactionScope事务

    个人理解就是: 吧一些方法封装在TransactionScope里面,如果全部执行成功 那么事务就会提交 方法执行,加入其中一个方法不成功,事务就会自动回滚.代码重用性高 TransactionSco ...

  6. EF 多线程TransactionScope事务异常事务(进程 ID 58)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。

    在使用EF的TransactionScope事务时,如果多线程程序,经常会抛出如下异常 {"事务(进程 ID 58)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品.请重新运行该事务 ...

  7. 数据库事务与TransactionScope代码事务区别

    1.TransactionScope代码事务 TransactionScope 类 位于using System.Transactions;命名空间下,需要在引用中手动加入.该类不能被继承. //// ...

  8. 本地事务和分布式事务工作实践

    一:从事务的历史说起 知已知彼,百战不败.想了解事务,我们从事务的历史说起. 在Windows平台上,事务的概念最开始出现在关系型数据库中,但是随着.net平台的发展,事务包括的的范围也越来越宽,先一 ...

  9. mysql ef6 事务_使用事务-EF6 | Microsoft Docs

    使用事务Working with Transactions 10/23/2016 本文内容 备注 仅限 EF6 及更高版本 - 此页面中讨论的功能.API 等已引入实体框架 6.EF6 Onwards ...

最新文章

  1. 考驾照选择 AI 教练,心态稳定不骂人
  2. 是否有一个不区分大小写的string.Replace的替代方法?
  3. 推荐一些顶级的开源CI/CD工具
  4. python基础入门:while 循环
  5. ubuntu下sublime如何一次只打開一個文件
  6. WIFI无线路由器的五种工作模式
  7. 合成艺术字二 :使用的透明类以及所用的颜色选择器JS(完整事列源码)
  8. java用二维数组编写地图_[Java] Java二维数组写一个超级简单的扫雷游戏,适合新手...
  9. App引导页学习进阶临摹模板|UI界面设计步骤
  10. TMS、物流系统、司机运输商、承运商、结算流程、运输流程、运输调度、结构图、在途跟踪、提货单、签收单、回单交接、车辆管理、运力资源、报价管理、发票管理、询价单管理、审批报价、KPI数据、适度配载
  11. centos java创建文件_CentOS java生成文件并赋予权限的问题
  12. 多阶段决策求最优解----动态规划(Dynamic Programming)
  13. 使用System Center Essentials 2007查看计算机的软件清单
  14. Cannot uninstall ‘requests’. It is a distutils installed project and thus we cannot accurately deter
  15. 解决 Windows 照片查看器无法显示此图片,因为计算机上的可用内存可能不足
  16. echarts封装 - 续2
  17. [交互设计]简约至上4原则
  18. 卡塔尔世界杯进入倒计时,万人观赛的直播体验如何保障?
  19. cocos creator android 真机调试配置密匙
  20. 2023最新自动采集影视CMS程序源码+全开源的/功能也强大

热门文章

  1. opencv 视频中的人脸打码
  2. 8g内存和16g内存区别 mac_苹果8g和16g的区别大盘点
  3. postcss-px2vw插件将px转vw、rem
  4. 【Django】中间件
  5. AU消除人声+高质量伴奏
  6. 产品是什么·之·千岛湖啤酒
  7. matlab实现图片加亮、灰度、取反、增强对比度操作
  8. php实现教学卡片,CSS3实现卡片效果
  9. i7 7700k可以装linux吗,2018年自己组装电脑教程:intel七代I7-7700K/Z270核显装机教程...
  10. requests+cookie爬取淘宝任意商品评论。超详细教程!