【问题标题】:what is Enlist=false means in connection string for sql server?sql server 的连接字符串中的 Enlist=false 是什么意思?
【发布时间】:2016-03-01 06:34:34
【问题描述】:

我是 .net 的初学者。我遇到了以下错误的问题

“无法执行事务操作,因为有待处理的请求正在处理此事务。”。

我在博客的某处读到。我在我的连接字符串中附加了enlist=true,问题就解决了。

注意:我正在将我的数据库从 sql server 2005 升级到 sql server 2008R2。

请帮助理解使用 enlist 的重要性。

【问题讨论】:

    标签: c# sql-server-2005 sql-server-2008-r2 ado.net


    【解决方案1】:

    登记是Distributed Transaction的用户

    Connection 对象将自动加入现有的 分布式事务,如果它确定事务处于活动状态。 打开连接时发生自动事务登记 或从连接池中检索。您可以禁用自动登记 通过将Enlist=false 指定为连接,在现有事务中 SqlConnection 的字符串参数,或 OLE DB Services=-7 作为 OleDbConnection 的连接字符串参数。

    注意在调用EnlistDistributedTransaction之前连接必须是open

    这里有一个Enlist=False;的例子

    【讨论】:

      【解决方案2】:

      MSDN 说:

      ConnectionString 属性支持关键字 Enlist,它 指示 System.Data.SqlClient 是否将检测事务性 上下文并自动在分布式中登记连接 交易。 如果 Enlist=true,则自动登记连接 在打开线程的当前事务上下文中。 如果 Enlist=false, SqlClient 连接不与分布式交互 交易。 Enlist 的默认值为 true。如果 Enlist 不是 在连接字符串中指定,连接自动 如果在一个分布式事务中检测到一个 连接已打开。

      【讨论】:

      • 这似乎具有误导性,因为 Enlist=false 意味着连接不会在任何环境事务(例如来自 TransactionScope)中登记,无论它是否是分布式的。所以设置 Enlist=false 只有在你根本不需要 TransactionScopes 时才有效,这似乎是一件非常不受欢迎的事情。
      猜你喜欢
      • 1970-01-01
      • 2021-05-19
      • 2013-02-27
      • 1970-01-01
      • 1970-01-01
      • 2017-05-20
      • 1970-01-01
      • 1970-01-01
      • 2014-09-13
      相关资源
      最近更新 更多