【问题标题】:How do I keep an OleDbConnection from trying to enlist in a distributed transaction?如何阻止 OleDbConnection 尝试加入分布式事务?
【发布时间】:2010-12-05 10:17:14
【问题描述】:

我正在使用 OleDB 使用此连接字符串连接到 excel 文件

@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0 Xml;HDR=YES"""

但是当我这样做时(在 TransactionScope() 中)

using (OleDbConnection conn = new OleDbConnection(connectionString))
{
    conn.Open();
    ...
}

我收到以下错误

ITransactionLocal 接口不是 得到了支持 'Microsoft.ACE.OLEDB.12.0' 提供程序。 本地交易不可用 与当前的提供商。

如何使 OleDbConnection 不尝试加入分布式事务? SqlConnection class 有一个名为“Enlist”的 ConnectionString 属性,但我找不到 OleDB 的等效配置或方法。

【问题讨论】:

  • 但这是本地事务对吧?该错误仅谈论本地而不是分布式的。我不确定您的情况,但可能是我的帖子 [faiz.kera.la/2009/08/26/… 可能对您有所帮助。
  • 是的,错误说是本地事务,但是没有显式的本地事务,只有 TransactionScope

标签: .net transactions oledb


【解决方案1】:

在您的连接字符串中添加以下代码: ";OLE DB 服务=-4;"

【讨论】:

  • 这是一个绝妙的解决方案,也拯救了我的培根!我讨厌这些东西怎么这么无证......我想知道你是怎么知道它的 Reza?
  • 我知道这已经 3 岁了,但我偶然发现了这个解决方案,并想知道它背后的原因。它禁用 ole db 池和自动登记。更多信息请参见表 4:msdn.microsoft.com/en-us/library/ms810829.aspx
猜你喜欢
  • 1970-01-01
  • 2010-09-09
  • 1970-01-01
  • 2010-11-03
  • 2013-03-27
  • 2019-07-11
  • 2015-07-02
  • 2010-12-25
相关资源
最近更新 更多