原因一:没有打开MSDTC服务
步骤:
- Componet Services-->右击My Computer--->Start MSDTC
- Componet Services-->右击My Computer-->属性--->MSDTC-->安全配置--->勾选上我红线标注的部分。
原因二: 防火墙阻止
解决方法,添加135端口到Exception
原因三:使用了多个连接
1: using (TransactionScope ts = new TransactionScope())
2: {
3: //...
4: ts.complete();
5: }
TransactionScope不允许一个事务里有多个连接,解决办法是我们加个基础类,让所有的都是用同一个连接
1: public class BaseDataAccess
2: {
3: private SqlConnection mSqlconnection;
4: protected SqlConnection sqlConnection
5: {
6: get
7: {
8: if (mSqlconnection == null) mSqlconnection = new SqlConnection(SqlHelper.mConnectionString);
9: return mSqlconnection;
10: }
11: }
12: }
但是这里面需要注意的是,假如我们在一组事务里如果打开多个SqlDataReader,就会出错,解决办法:
ADO.NET 2.的一个新特征多数据结果集(Multiple Active Result Sets,简称MARS)-它允许在单个连接上执行多重的数据库查询或存储过程。这样的结果是,你能够在单个连接上得到和管理多个、仅向前引用的、只读的结果集。目前实现这个功能的数据库只有Sql Server 2005。所以当我们针对Sql Sever 2005的时候,需要重新审视DataReader对象的使用。使用SqlServer 2005,可以在一个Command对象上同时打开多个DataReader,节约数据库联接所耗费的服务器资源,在实际开发中普遍存在的一种典型的从数据库中读写数据的情形是,你可以使用多重连接而现在只用一个连接就足够了。例如,如果你有一些来自于几个表中的数据-它们不能被联结到一个查询中,那么你就会有多重的连接-每个连接都有一个与之相关连的命令用于读取数据。同样,如果你正在向一个表写数据,那么你需要另外一个连接或连接集合-如果有多个表要被更新的话。
例如下面的代码
1: //MultipleActiveResultSets=true打开联接
2: string connstr = "server=(local);database=northwind;integrated security=true;MultipleActiveResultSets=true";
3: SqlConnection conn = new SqlConnection(connstr);
4: conn.Open();
5: SqlCommand cmd1 = new SqlCommand("select * from customers", conn);
6: SqlCommand cmd2 = new SqlCommand("select * from orders", conn);
7: SqlDataReader rdr1 = cmd1.ExecuteReader();
8: // next statement causes an error prior to SQL Server 2005
9: SqlDataReader rdr2 = cmd2.ExecuteReader();
10: // now you can reader from rdr1 and rdr2 at the same time.
11: conn.Close();
王德水 祝你编程愉快
分享到:
相关推荐
大家跨服务器加事务的时候经常遇到以下报错:导入Microsoft分布式事务处理协调器MSDTC,网上大部分教程都是服务器配置msdtc,但是发现两个服务器都配置之后还是不行,可参照此图片解决,已验证过,不好用找我,最低...
自定义事物类,以及 System....System.Transactions 基础结构通过支持在 SQL Server、ADO.NET、MSMQ 和 Microsoft 分布式事务协调器 (MSDTC) 中启动的事务,使事务编程在整个平台上变得简单和高效、看来没别的对象了。
经过本人使用解决msdtc 服务不能启动没有问题
服务器×××上的MSDTC不可用解决办法1
SQL Server 分布式数据库的问题和解决方法 msdtc 配置
服务器上的******msdtc不可用解决,做了一个批处理!
服务器上的MSDTC不可用解决办法,服务器上的MSDTC不可用解决办法,服务器上的MSDTC不可用解决办法。
中间层创建事务失败解决,原因:MSDTC服务不能启动
解决VS.NET使用中属性框不显示的问题.txt 里的InputBox.txt 模拟鼠标和键盘操作.txt 取CPU的序列号.txt 如何:在VisualC#.NET中建立一个平滑的进度条.txt 如何得到网卡号.txt 如何调用WindowsAPI的要点.txt ...
服务器上的MSDTC不可用解决办法 ,如果Distributed Transaction Coordinator 无法启动,则是因为丢失了日志文件,重新创建日志文件,再启动就行了。
局域网内, MSDTC服务配置, SQLServer 跨库事务
开始==>运行==>CMD回车启动命令行。 直接启动服务:net start msdtc 如果启动失败的话按下列步骤执行在命令行输入services.msc打开服务管理器找到Distributed ...msdtc –uninstall msdtc -install net start msdtc
MSDTC不能启动的几个解决方法MSDTC不能启动的几个解决方法
遇到这样一个问题:程序实现创建sqlserver 端点,添加webmethod,删除webmethod,如果直接用ado.net 的sqlhelp 实现,总是报错,后来想到了用sqlcmd
2003群集MSDTC安装后导致群集无法切换问题的解决
除了元件必須設定MSDTC的安全設定外,跨網段連接時,尚必須讓兩台機器認識到彼此,也能利用MSDTC進行資料庫連結。
msdtc 修复的批处理文件,可以修复IIS无法正常连接ACCESS
使用DTCPing工具解决MSDTC问题(新事务无法在指定的事务协调器中登记) 一、msdtc依赖于rpc,rpc使用的端口是135,测试135端口是否打开. 是否有防火墙?如果有先关了防火墙. telnet ip 135 如果是关闭的打开它. 二、两台...
MSDTC(分布式交易协调器),协调跨多个数据库、消息队列、文件系统等资源管理器的事务。该服务的进程名为Msdtc.exe,该进程调用系统Microsoft Personal Web Server和Microsoft SQL Server。该服务用于管理多个服务器