C#轻量级企业事务 - TransactionScope
- using System;
- using System.Data.SqlClient;
- using System.Transactions;
- namespace SomeDBTransaction
- {
- class Program
- {
- static void Main(string[] args)
- {
- string con1 = "SERVER=.; DATABASE=db1; UID=sa; PWD=llh";
- string con2 = "SERVER=.; DATABASE=db2; UID=sa; PWD=llh";
- string sqlStr1 = "U_t1";
- string sqlStr2 = "U_t1";
- int resu=CreateTransactionScope(con1, con2, sqlStr1, sqlStr2);
- Console.WriteLine("受影响的行数:"+resu);
- Console.Read();
- }
- // This function takes arguments for 2 connection strings and commands to create a transaction
- // involving two SQL Servers. It returns a value > 0 if the transaction is committed, 0 if the
- // transaction is rolled back. To test this code, you can connect to two different databases
- // on the same server by altering the connection string, or to another 3rd party RDBMS by
- // altering the code in the connection2 code block.
- static public int CreateTransactionScope(
- string connectString1, string connectString2,
- string commandText1, string commandText2)
- {
- // Initialize the return value to zero and create a StringWriter to display results.
- int returnValue = ;
- System.IO.StringWriter writer = new System.IO.StringWriter();
- try
- {
- // Create the TransactionScope to execute the commands, guaranteeing
- // that both commands can commit or roll back as a single unit of work.
- using (TransactionScope scope = new TransactionScope())
- {
- using (SqlConnection connection1 = new SqlConnection(connectString1))
- {
- // Opening the connection automatically enlists it in the
- // TransactionScope as a lightweight transaction.
- connection1.Open();
- // Create the SqlCommand object and execute the first command.
- SqlCommand command1 = new SqlCommand(commandText1, connection1);
- command1.CommandType = System.Data.CommandType.StoredProcedure;
- returnValue = command1.ExecuteNonQuery();
- writer.WriteLine("Rows to be affected by command1: {0}", returnValue);
- // If you get here, this means that command1 succeeded. By nesting
- // the using block for connection2 inside that of connection1, you
- // conserve server and network resources as connection2 is opened
- // only when there is a chance that the transaction can commit.
- using (SqlConnection connection2 = new SqlConnection(connectString2))
- {
- // The transaction is escalated to a full distributed
- // transaction when connection2 is opened.
- connection2.Open();
- // Execute the second command in the second database.
- returnValue = ;
- SqlCommand command2 = new SqlCommand(commandText2, connection2);
- command1.CommandType = System.Data.CommandType.StoredProcedure;
- returnValue = command2.ExecuteNonQuery();
- writer.WriteLine("Rows to be affected by command2: {0}", returnValue);
- }
- }
- // The Complete method commits the transaction. If an exception has been thrown,
- // Complete is not called and the transaction is rolled back.
- scope.Complete();
- }
- }
- catch (TransactionAbortedException ex)
- {
- writer.WriteLine("TransactionAbortedException Message: {0}", ex.Message);
- }
- catch (ApplicationException ex)
- {
- writer.WriteLine("ApplicationException Message: {0}", ex.Message);
- }
- catch (Exception ex)
- {
- writer.WriteLine("ERROR: {0}",ex.Message);
- }
- // Display messages.
- Console.WriteLine(writer.ToString());
- return returnValue;
- }
- }
- }
CODE
代码很简单啦 ~~,就多加了一个using而已
C#轻量级企业事务 - TransactionScope的更多相关文章
- Cassandra如何利用线性一致性来实现轻量级的事务
分布式数据库会面临着一个独特的挑战,就是数据必须要严格的按照读,写顺序执行.如创建用户,转账,两个潜在的写操作竞态条件必须要确保一个写操作必须在另外一个之前发生.在Cassandra中,使用Paxos ...
- 分布式事务TransactionScope
分布式事务TransactionScope 以下是分布式事务的所有情况的例子了,包含了事务套事务,事务套存储过程事务,经过测试,TransactionScope对于分布式事务的各种情况支持的很好. 使 ...
- 探索逻辑事务 TransactionScope
一.什么是TransactionScope? TransactionScope即范围事务(类似数据库中的事务),保证事务声明范围内的一切数据修改操作状态一致性,要么全部成功,要么全部失败回滚. MSD ...
- 代码块事务—TransactionScope
今天上班遇到这样的业务:将删除的用户信息记录到记录表,再删除用户表中的信息. 可以说是不幸也可以说是幸运的. 在以往遇到这样的业务,我会考虑到各种出现异常或者失败的情况.在删除一张表数据失败的情况,对 ...
- 【NET Core】事务TransactionScope
.NET FrameWork时期: TransactionScope是FCL System.Transactions命名空间下的分布式事务组件,它默认为本地事务,当系统有需要时可以自动提升为分布式事务 ...
- 分布式事务TransactionScope所导致几个坑
记录一下,个人见解,欢迎指正 错误: 1.该伙伴事务管理器已经禁止了它对远程/网络事务的支持. (异常来自 HRESULT:0x8004D025)2.事务已被隐式或显式提交,或已终止3.此操作对该事务 ...
- 轻量级企业私有云 JimV 分享
当前云市场分析 云分两种,公有云.私有云.目前市面上的云产品,对于中小规模的企业来讲,痛点有如下几点: 私有云: 1.VMware ESXi 类: a) 授权费用昂贵: b) 创建虚拟机费时费力: 2 ...
- C# TransactionScope 事务类
微软自带的TransactionScope(.Net Framework 2之后)是个好东东,提供的功能也很强大. 首先说说TransactionScope是什么,并能为我们做什么事情.其实看Tran ...
- 事务使用中如何避免误用分布式事务(System.Transactions.TransactionScope)
1:本地事务DbTransaction和分布式事务TransactionScope的区别: 1.1:System.Data.Common.DbTransaction: 本地事务:这个没什么好说了,就是 ...
随机推荐
- Docker基础技术:DeviceMapper
在上一篇介绍AUFS的文章中,大家可以看到,Docker的分层镜像是怎么通过UnionFS这种文件系统做到的,但是,因为Docker首选的AUFS并不在Linux的内核主干里,所以,对于非Ubuntu ...
- URAL 1233 Amusing Numbers 好题
参照了nocow上的解法,照搬过来…… 易知一个数X在数列中在另一个数Y前,当且仅当X前缀小于Y或前缀相等X短,那么我们分布考虑,比如对于数48561: 5位上:10000~48560; 4位上:10 ...
- EasyUi datagrid 表格分页例子
1.首先引入 easyui的 css 和 js 文件 2.前台 需要写的js //源数据 function Async(action,args,callback){ $.ajax({ url: a ...
- eclipse中maven项目部署到tomcat
其实maven项目部署到tomcat的方式很多,我从一开始的打war包到tomcat/webapps目录,到使用tomcat-maven插件,到直接使用servers部署,一路来走过很多弯路. 下面就 ...
- OkHttp使用进阶(译自OkHttp官方教程)
没有使用过OkHttp的,可以先看OkHttp使用介绍 英文版原版地址 Recipes · square/okhttp Wiki 同步get 下载一个文件,打印他的响应头,以string形式打印响应体 ...
- 【分享】IT产业中的三大定理(二) —— 安迪&比尔定理 (Andy and Bill's Law)
摩尔定理给所有的计算机消费者带来一个希望,如果我今天嫌计算机太贵买不起,那么我等十八个月就可以用一半的价钱来买.要真是这样简单的话,计算机的销售量就上不去了.需要买计算机的人会多等几个月,已经有计算机 ...
- poj 1017 Packets 裸贪心
Packets Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 43189 Accepted: 14550 Descrip ...
- MVC用户登陆验证及权限检查(Form认证)
1.配置Web.conf,使用Form认证方式 <system.web> <authentication mode="None" /> ...
- HDU 4658 Integer Partition(整数拆分)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4658 题意:给出n.k.求n的拆分方案数.要求拆分中每个数不超过k. i64 f[N]; void i ...
- 总结Selenium自动化测试方法(五)自动化测试框架
五.自动化测试框架 1.单元测试框架unittest class loginTests(unittest.TestCase): ①开始的初始化部分 @classmethod def setUpClas ...