.NET分布式事务--TransactionScop
一、开启DTC服务
方式一
计算机—管理—服务—Distributed Transaction Coordinator—属性—开启
方式二
CMD命令子界面输入:net start msdtc
二、设置MSDTC
CMD命令界面输入:dcomcnfg.exe(或者:控制面板—管理工具—组件服务)
组件服务--计算机--我的电脑--Distributed Transaction Coordinator-本地DTC
三、
防火墙设置
设置例外程序“C:\Windows\System32\msdtc.exe”
四、数据库管理系统设置
数据库系统的设置,具体如下图。
右键 实例 属性
五、代码
DAL层代码
public static bool ExecuteSqlTranScope(List<SqlCommand> cmdList)
{
int rows = ;
try
{
using (System.Transactions.TransactionScope tsCope = new System.Transactions.TransactionScope())
{
foreach (SqlCommand cmd in cmdList)
{
cmd.Connection.Open();
PrepareCommand(cmd, cmd.Connection, null, CommandType.Text, cmd.CommandText, cmd.Parameters);
rows += cmd.ExecuteNonQuery();
}
tsCope.Complete();
}
if (rows > )
return true;
else
return false;
}
catch
{
return false;
}
}
调用
List<System.Data.SqlClient.SqlCommand> cmdList = new List<System.Data.SqlClient.SqlCommand>(); string connectStr = "data source=192.168.1.221;initial catalog=db;persist security info=True;user id=sa;password=123456;"; string connectStr2 = "data source=192.168.1.221;initial catalog=db;persist security info=True;user id=sa;password=123456;"; string sql = "INSERT INTO [SYS_USER_ADMIN]([FID],[LANGUAGEID],[LOGIN],[PASSWORD],[NAME],[CREATEMAN],[CREATEDATE],[MODIFYMAN],[MODIFYDATE],[UPDATETIME])VALUES (NEWID(),1,'TEST','TEST','TEST','',GETDATE(),'',GETDATE(),GETDATE())"; string sql2 = "INSERT INTO [SYS_USER_ADMIN]([FID],[LANGUAGEID],[LOGIN],[PASSWORD],[NAME],[CREATEMAN],[CREATEDATE],[MODIFYMAN],[MODIFYDATE],[UPDATETIME])VALUES (NEWID(),1,'TEST2','TEST2','TEST2','',GETDATE(),'',GETDATE(),GETDATE())"; cmdList.Add(new System.Data.SqlClient.SqlCommand(sql, new System.Data.SqlClient.SqlConnection(connectStr))); cmdList.Add(new System.Data.SqlClient.SqlCommand(sql2, new System.Data.SqlClient.SqlConnection(connectStr2))); SqlHelper.ExecuteSqlTranScope(cmdList);
其他错误情况:
错误1:(前提是程序和数据库 不在同一个服务器时)已禁用对分布式事务管理器(MSDTC)的网络访问。请使用组件服务管理工具启用 DTC 以便在 MSDTC 安全配置中进行网络访问。
需要设置程序服务器的DTC
错误2: 该事务管理器已经禁止了它对远程/网络事务的支持。 (异常来自 HRESULT:0x8004D024)
需要设置数据库服务器的DTC
错误3:与基础事务管理器的通信失败
需要设置程序服务器的DTC 防火墙问题
参考 http://wenku.baidu.com/link?url=ps4eSRpjF6TVy0tY7jCHSSOv1SmE4wzpDnxsBmy7C21FcFgb1mJySCCf82-fUASTD12f1C_7VhKIryEFCaWLA7ZS4UwRcMlOumWmY7KNISG
.NET分布式事务--TransactionScop的更多相关文章
- 群集中的MS DTC分布式事务协调器
MS DTC在大多数SQL 服务器下都需要安装,若只是安装数据库引擎或Analysis 服务可不安装DTC.如果后需要使用分布式事务,则可在SQL Server群集安装完成后再安装DTC. 一.群集M ...
- 事务使用中如何避免误用分布式事务(System.Transactions.TransactionScope)
1:本地事务DbTransaction和分布式事务TransactionScope的区别: 1.1:System.Data.Common.DbTransaction: 本地事务:这个没什么好说了,就是 ...
- 没有活动事务 链接服务器的 OLE DB 访问接口 "SQLNCLI" 无法启动分布式事务
在windows2003下执行分布式事务的时候出现如下情况. 一. 问题现象在执行分布式事务时,在sql server 2005下收到如下错误: 链接服务器"xxxxxxx"的 O ...
- 已禁用对分布式事务管理器(MSDTC)的网络访问的解决方法之一
C# ASP.NET项目提示上述错误,在代码中使用分布式事务提示添加或修改到数据库的时候.添加数据到数据库时,不会设置实体类的主键字段.
- 【转】PostgreSQL分布式事务配置
XA是open group提出的分布式事务处理规范,JTA支持XA规范,JTA只规定了接口,有些应用容器提供实现,也有一些三方的开源实现可用,比如Atomikos. 如果PostgreSQL参与分布式 ...
- 分布式事务(一)两阶段提交及JTA
原创文章,同步发自作者个人博客 http://www.jasongj.com/big_data/two_phase_commit/ 分布式事务 分布式事务简介 分布式事务是指会涉及到操作多个数据库(或 ...
- 关于分布式事务的一个误解:使用了TransactionScope就一定会开启分布式事务吗?
背景: 事务是数据库管理系统的一个基本概念,事务具有四个基本特点,即ACID:原子性(Atomicity).一致性(Consistency).隔离性(Isolation)和持久性(Durability ...
- 分布式事务操作之Spring+JTA
什么是分布式事务?在网上找了一段比较容易理解的"定义". 分布式事务是指事务的参与者.支持事务的服务器.资源管理器以及事务管理器分别位于分布系统的不同节点之上,在两个或多个网络计算 ...
- java分布式事务
1.现有方案 a.atomikos b.jotm 说明:spring3.0已将jotm的支持踢掉 2.使用atomikos时的pom.xml内容 <!-- 分布式事务支持-atomikos-be ...
随机推荐
- 【转】APNs消息推送完整讲解
https://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificat ...
- node四大优势 转
1. Nodejs基于Javascript语言,不用再单独新学一门陌生的语言,从而减低了学习的门槛.同时,Javascript语言在Web前端开发中至关重要,特别HTML5的应用必须要使用,所以前后台 ...
- 上线踩坑引发的处理方式---lsof,strace
两个跟踪进程的linux命令 lsof -p pidstrace -p pid快速跟踪进程出现问题的地方.由于进程本身运行良好,但是内部一直等待第三方哪个应答,导致进程假死.引用自:http://li ...
- requireJS 用法
requireJS使用教程 2.0 常用方法 requirejs.config : 为模块指定别名 requirejs : 将写好的模块进行引入,根据模块编写主代码 define : 编写模块 htm ...
- JAVA基于缓冲的文件读写操作
File f2 = new File("e://index.java"); BufferedReader reader = new BufferedReader(new Input ...
- 【Python自动化运维之路Day4】
abs() 取绝对值all() 所有为真,则为真,否则为假any() 至少有一个为真,就为真,否则为假callable() 判断函数是否可以被调用,如果可以返回True,否则返回False ...
- 轻量级模块化开发框架 Hasor 核心模块 v0.0.2 发布
首先引用Wiki的介绍一下Hasor: “Hasor是一款开源框架.它是为了解决企业模块化开发中复杂性而创建的.Hasor遵循简单的依赖.单一职责,在开发多模块企业项目中更加有调理.然 而Ha ...
- 使用 Microsoft Fakes 进行单元测试
本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载. 在编写单元测试时,我们会遇到不同的外部依赖项,大体上可以分为两类: 依赖于接口或抽象类 依赖于具体类 ...
- 一个格式化日期和时间的JavaScript类库
原文地址:http://www.cnblogs.com/zhangpengshou/archive/2012/07/19/2599053.html 结合meizz的代码做了适当调整. Date.pro ...
- LINQ-to-SQL那点事~利用反射在LINQ-to-SQL环境中实现Ado.net的CURD操作
回到目录 对于linq to sql提供的CURD操作,给我们的感觉就是简单,容易使用,更加面向对象,不用拼SQL语句了,这些好处都表示在处理单条实体或者集合长度小的情况下,如果有一个1000条的集合 ...