c#传统SqlTransaction事务和TransactionScope事务
事务有很多种,看了一些关于事务的问题,这里做下笔记·····
事务时单个的工作单位。如果某一事务成功,则在该事务中进行的所有数据更改均会提交,成为数据库中永久的组成部分。若果事务遇到错误,则必须取消或回滚,所有数据均被更改清除。
属性:
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事务相关推荐
- C#分布式事务(TransactionScope )
TransactionScope是.Net Framework 2.0后,新增了一个名称空间.它的用途是为数据库访问提供了一个"轻量级"[区别于:SqlTransaction]的事 ...
- TransactionScope 事务使用说明
TransactionScope是.Net Framework 2.0滞后,新增了一个名称空间.它的用途是为数据库访问提供了一个"轻量级"[区别于:SqlTransaction]的 ...
- TransactionScope事务简介
在.NET 1.0/1.1 版本我们使用SqlTransaction.处理事务 string connString = ConfigurationManager.ConnectionStrings[& ...
- 【转】TransactionScope事务简介
在.NET 1.0/1.1 版本我们使用SqlTransaction.处理事务 string connString = ConfigurationManager.ConnectionStrings[& ...
- TransactionScope事务
个人理解就是: 吧一些方法封装在TransactionScope里面,如果全部执行成功 那么事务就会提交 方法执行,加入其中一个方法不成功,事务就会自动回滚.代码重用性高 TransactionSco ...
- EF 多线程TransactionScope事务异常事务(进程 ID 58)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。
在使用EF的TransactionScope事务时,如果多线程程序,经常会抛出如下异常 {"事务(进程 ID 58)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品.请重新运行该事务 ...
- 数据库事务与TransactionScope代码事务区别
1.TransactionScope代码事务 TransactionScope 类 位于using System.Transactions;命名空间下,需要在引用中手动加入.该类不能被继承. //// ...
- 本地事务和分布式事务工作实践
一:从事务的历史说起 知已知彼,百战不败.想了解事务,我们从事务的历史说起. 在Windows平台上,事务的概念最开始出现在关系型数据库中,但是随着.net平台的发展,事务包括的的范围也越来越宽,先一 ...
- mysql ef6 事务_使用事务-EF6 | Microsoft Docs
使用事务Working with Transactions 10/23/2016 本文内容 备注 仅限 EF6 及更高版本 - 此页面中讨论的功能.API 等已引入实体框架 6.EF6 Onwards ...
最新文章
- 考驾照选择 AI 教练,心态稳定不骂人
- 是否有一个不区分大小写的string.Replace的替代方法?
- 推荐一些顶级的开源CI/CD工具
- python基础入门:while 循环
- ubuntu下sublime如何一次只打開一個文件
- WIFI无线路由器的五种工作模式
- 合成艺术字二 :使用的透明类以及所用的颜色选择器JS(完整事列源码)
- java用二维数组编写地图_[Java] Java二维数组写一个超级简单的扫雷游戏,适合新手...
- App引导页学习进阶临摹模板|UI界面设计步骤
- TMS、物流系统、司机运输商、承运商、结算流程、运输流程、运输调度、结构图、在途跟踪、提货单、签收单、回单交接、车辆管理、运力资源、报价管理、发票管理、询价单管理、审批报价、KPI数据、适度配载
- centos java创建文件_CentOS java生成文件并赋予权限的问题
- 多阶段决策求最优解----动态规划(Dynamic Programming)
- 使用System Center Essentials 2007查看计算机的软件清单
- Cannot uninstall ‘requests’. It is a distutils installed project and thus we cannot accurately deter
- 解决 Windows 照片查看器无法显示此图片,因为计算机上的可用内存可能不足
- echarts封装 - 续2
- [交互设计]简约至上4原则
- 卡塔尔世界杯进入倒计时,万人观赛的直播体验如何保障?
- cocos creator android 真机调试配置密匙
- 2023最新自动采集影视CMS程序源码+全开源的/功能也强大
热门文章
- opencv 视频中的人脸打码
- 8g内存和16g内存区别 mac_苹果8g和16g的区别大盘点
- postcss-px2vw插件将px转vw、rem
- 【Django】中间件
- AU消除人声+高质量伴奏
- 产品是什么·之·千岛湖啤酒
- matlab实现图片加亮、灰度、取反、增强对比度操作
- php实现教学卡片,CSS3实现卡片效果
- i7 7700k可以装linux吗,2018年自己组装电脑教程:intel七代I7-7700K/Z270核显装机教程...
- requests+cookie爬取淘宝任意商品评论。超详细教程!