如何让OleDbConnection不要尝试在分布式事务中登记?

Jer*_*eir 6 .net oledb transactions

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

@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0 Xml;HDR=YES"""
Run Code Online (Sandbox Code Playgroud)

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

using (OleDbConnection conn = new OleDbConnection(connectionString))
{
    conn.Open();
    ...
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

"Microsoft.ACE.OLEDB.12.0"提供程序不支持ITransactionLocal接口.当前提供商无法使用本地交易.

如何让OleDbConnection不尝试在分布式事务中登记?该SqlConnection类有一个名为"登记"一个ConnectionString属性,但我找不到OLEDB等效的结构和方法.

小智 12

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

  • 我知道这已经3年了,但我偶然发现了这个解决方案,并想知道它背后的原因.它禁用ole db pooling和auto-enlistment.更多信息,请参见表4:http://msdn.microsoft.com/en-us/library/ms810829.aspx (3认同)