原因一:没有打开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();
王德水 祝你编程愉快
分享到:
相关推荐
了解并熟练掌握ADO.NET事务的使用对于开发高效、可靠的数据驱动应用程序至关重要。在实际应用中,事务的正确使用能有效防止数据损坏,保证数据一致性,尤其在处理大量并发操作和复杂业务流程时显得尤为重要。
在实际开发中,根据项目需求和性能考虑,可以选择使用Ado.Net事务处理,或者考虑其他如分布式事务(如MSDTC)或ORM框架(如Entity Framework)提供的事务管理功能。对于大型企业级应用,可能需要更高级的事务管理...
6. **ADO.NET与事务**:在ASP.NET中,通常使用ADO.NET与数据库交互。`SqlConnection`对象提供了`BeginTransaction`、`Commit`和`Rollback`方法来处理事务。开发者可以创建一个数据库连接,开始事务,执行SQL命令,...
在ADO.NET中,可以通过SqlConnection的BeginTransaction方法开启一个新的事务,并通过Transaction对象进行控制。 2. **自动事务管理**:当使用Entity Framework等ORM工具时,事务通常在数据库上下文中自动管理。例如...
解决服务器上的MSDTC不可用问题 MSDTC( Distributed Transaction Coordinator,分布式交易协调器)是一种协调跨多个数据库、消息队列、文件系统等资源管理器的事务的服务。该服务的进程名为Msdtc.exe,依赖于...
大家跨服务器加事务的时候经常遇到以下报错:导入Microsoft分布式事务处理协调器MSDTC,网上大部分教程都是服务器配置msdtc,但是发现两个服务器都配置之后还是不行,可参照此图片解决,已验证过,不好用找我,最低...
在.NET中,分布式事务通常由MSDTC(Microsoft Distributed Transaction Coordinator)服务处理。 5. **DbTransaction**: 这是ADO.NET中与特定数据库连接相关的事务接口,如SqlTransaction(针对SQL Server)。在...
"MSDTC服务无法启动解决方法" MSDTC(Distributed Transaction Coordinator),即分布式事务协调器,是一种协调跨多个数据库、消息队列、文件系统等资源管理器的事务服务。该服务的进程名为Msdtc.exe,该进程调用...
解决`TransactionScope`在大数据量下出错的方法之一是避免使用它,而是手动管理事务。例如,通过显式使用数据库连接的BeginTransaction、Commit和Rollback方法来控制事务。这种方法允许更细粒度的控制,可以分批处理...
自定义事物类,以及 System....System.Transactions 基础结构通过支持在 SQL Server、ADO.NET、MSMQ 和 Microsoft 分布式事务协调器 (MSDTC) 中启动的事务,使事务编程在整个平台上变得简单和高效、看来没别的对象了。
在.NET 2.0框架中,分布式事务处理是解决跨越多个数据库、应用程序或服务的事务一致性问题的关键技术。本文将深入探讨.NET 2.0下的分布式事务解决方案,并结合提供的源代码进行分析。 分布式事务允许在不同的资源...
为了解决这些问题,微软在.NET 2008版中引入了新的事务处理机制,包括隐式事务处理和显式事务处理编程模型。 文章中提到的MSDTC(Microsoft Distributed Transaction Coordinator)是一个协调分布式事务的关键组件...
分布式事务协调器(MSDTC,Microsoft Distributed Transaction Coordinator)是Windows操作系统中的一项重要服务,它负责协调跨越多个资源管理器(如数据库、消息队列、文件系统等)的分布式事务处理。MSDTC确保在...
7. **分布式事务**:对于跨越多个数据库的复杂操作,可以使用分布式事务,如MSDTC(Microsoft Distributed Transaction Coordinator)。C#的`System.Transactions`命名空间提供了对此的支持。 8. **安全性**:在...
### MSDTC不能启动的几个解决方法 #### 一、引言 在IT环境中,MSDTC(Microsoft Distributed Transaction Coordinator)是用于协调分布式事务的关键组件。它确保了在多个资源管理器(如数据库、消息队列等)之间的...
服务器上的MSDTC不可用解决办法,服务器上的MSDTC不可用解决办法,服务器上的MSDTC不可用解决办法。
SQL Server 分布式数据库的问题和解决方法 msdtc 配置
在Windows Server 2003环境下,群集服务(Cluster Service)与分布式事务处理协调器(Distributed Transaction Coordinator, MSDTC)的配合使用可能会遇到一些挑战,特别是在群集中的节点同时担任不同域控制器角色时...
服务器上的******msdtc不可用解决,做了一个批处理!
中间层创建事务失败解决,原因:MSDTC服务不能启动