`
wangdeshui
  • 浏览: 255718 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ADO.NET使用事务出错的解决(MSDTC)

阅读更多

原因一:没有打开MSDTC服务

步骤:

  • Componet Services-->右击My Computer--->Start MSDTC
  • Componet Services-->右击My Computer-->属性--->MSDTC-->安全配置--->勾选上我红线标注的部分。

image

 

image

原因二: 防火墙阻止

解决方法,添加135端口到Exception

image

原因三:使用了多个连接

   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事务的使用对于开发高效、可靠的数据驱动应用程序至关重要。在实际应用中,事务的正确使用能有效防止数据损坏,保证数据一致性,尤其在处理大量并发操作和复杂业务流程时显得尤为重要。

    Asp.Net事务和异常处理 (二)

    在实际开发中,根据项目需求和性能考虑,可以选择使用Ado.Net事务处理,或者考虑其他如分布式事务(如MSDTC)或ORM框架(如Entity Framework)提供的事务管理功能。对于大型企业级应用,可能需要更高级的事务管理...

    asp.net 事务处理

    6. **ADO.NET与事务**:在ASP.NET中,通常使用ADO.NET与数据库交互。`SqlConnection`对象提供了`BeginTransaction`、`Commit`和`Rollback`方法来处理事务。开发者可以创建一个数据库连接,开始事务,执行SQL命令,...

    ASP.Net事务和异常处理

    在ADO.NET中,可以通过SqlConnection的BeginTransaction方法开启一个新的事务,并通过Transaction对象进行控制。 2. **自动事务管理**:当使用Entity Framework等ORM工具时,事务通常在数据库上下文中自动管理。例如...

    服务器×××上的MSDTC不可用解决办法1

    解决服务器上的MSDTC不可用问题 MSDTC( Distributed Transaction Coordinator,分布式交易协调器)是一种协调跨多个数据库、消息队列、文件系统等资源管理器的事务的服务。该服务的进程名为Msdtc.exe,依赖于...

    导入Microsoft分布式事务处理协调器MSDTC失败的解决方案

    大家跨服务器加事务的时候经常遇到以下报错:导入Microsoft分布式事务处理协调器MSDTC,网上大部分教程都是服务器配置msdtc,但是发现两个服务器都配置之后还是不行,可参照此图片解决,已验证过,不好用找我,最低...

    事物在.NET中的应用

    在.NET中,分布式事务通常由MSDTC(Microsoft Distributed Transaction Coordinator)服务处理。 5. **DbTransaction**: 这是ADO.NET中与特定数据库连接相关的事务接口,如SqlTransaction(针对SQL Server)。在...

    msdtc解决 服务不能启动

    "MSDTC服务无法启动解决方法" MSDTC(Distributed Transaction Coordinator),即分布式事务协调器,是一种协调跨多个数据库、消息队列、文件系统等资源管理器的事务服务。该服务的进程名为Msdtc.exe,该进程调用...

    Transaction 分布式事物的应用举例

    自定义事物类,以及 System....System.Transactions 基础结构通过支持在 SQL Server、ADO.NET、MSMQ 和 Microsoft 分布式事务协调器 (MSDTC) 中启动的事务,使事务编程在整个平台上变得简单和高效、看来没别的对象了。

    net 2.0 分布式事务解决方案有原代码

    在.NET 2.0框架中,分布式事务处理是解决跨越多个数据库、应用程序或服务的事务一致性问题的关键技术。本文将深入探讨.NET 2.0下的分布式事务解决方案,并结合提供的源代码进行分析。 分布式事务允许在不同的资源...

    分布式事务处理在.NET中的应用.pdf

    为了解决这些问题,微软在.NET 2008版中引入了新的事务处理机制,包括隐式事务处理和显式事务处理编程模型。 文章中提到的MSDTC(Microsoft Distributed Transaction Coordinator)是一个协调分布式事务的关键组件...

    如何进入MSDTC服务

    分布式事务协调器(MSDTC,Microsoft Distributed Transaction Coordinator)是Windows操作系统中的一项重要服务,它负责协调跨越多个资源管理器(如数据库、消息队列、文件系统等)的分布式事务处理。MSDTC确保在...

    C#数据库远程访问

    7. **分布式事务**:对于跨越多个数据库的复杂操作,可以使用分布式事务,如MSDTC(Microsoft Distributed Transaction Coordinator)。C#的`System.Transactions`命名空间提供了对此的支持。 8. **安全性**:在...

    MSDTC不能启动的几个解决方法

    ### MSDTC不能启动的几个解决方法 #### 一、引言 在IT环境中,MSDTC(Microsoft Distributed Transaction Coordinator)是用于协调分布式事务的关键组件。它确保了在多个资源管理器(如数据库、消息队列等)之间的...

    服务器上的MSDTC不可用解决办法

    服务器上的MSDTC不可用解决办法,服务器上的MSDTC不可用解决办法,服务器上的MSDTC不可用解决办法。

    SQL Server 分布式数据库的问题和解决方法 msdtc 配置

    SQL Server 分布式数据库的问题和解决方法 msdtc 配置

    2003群集MSDTC安装后导致群集无法切换问题的解决

    在Windows Server 2003环境下,群集服务(Cluster Service)与分布式事务处理协调器(Distributed Transaction Coordinator, MSDTC)的配合使用可能会遇到一些挑战,特别是在群集中的节点同时担任不同域控制器角色时...

    TransactionScope出错

    解决`TransactionScope`在大数据量下出错的方法之一是避免使用它,而是手动管理事务。例如,通过显式使用数据库连接的BeginTransaction、Commit和Rollback方法来控制事务。这种方法允许更细粒度的控制,可以分批处理...

    msdtc不可用解决

    服务器上的******msdtc不可用解决,做了一个批处理!

    中间层创建事务失败解决

    中间层创建事务失败解决,原因:MSDTC服务不能启动

Global site tag (gtag.js) - Google Analytics