OleDbConnection得到"外部组件抛出异常。"

时间:2016-02-29 14:03:51

标签: c# oledb oledbconnection

我'使用Windows窗体应用程序将数据导出到Excel。

应用程序同时构建x64和x86。

因此,必须安装两个版本的Microsoft Access数据库引擎才能在同一台计算机上运行该应用程序。

首先安装AccessDatabaseEngine.exe 和AccessDatabaseEngine_x64.exe被动安装。

x64版本的应用程序正在运行

但是x86版本正在进行中

SEHException: "External component has thrown an exception."

 at System.Data.Common.UnsafeNativeMethods.IDBInitializeInitialize.Invoke(IntPtr pThis)
 at System.Data.OleDb.DataSourceWrapper.InitializeAndCreateSession(OleDbConnectionString constr, SessionWrapper& sessionWrapper)
 at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
 at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
 at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
 at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
 at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
 at System.Data.OleDb.OleDbConnection.Open()

代码部分如下;

var accessConnection = new OleDbConnection(connectionString);
accessConnection.Open();

ConnectionString是

Provider=Microsoft.ACE.OLEDB.12.0;Data Source="C:\Users\Me\Desktop\ExportTest.xls";Extended Properties="Excel 8.0;HDR=Yes";

我该如何解决?

6 个答案:

答案 0 :(得分:3)

当Visual Studio中的构建配置平台不正确时,通常会发生这种情况,这可能发生在两个构建配置平台x86和x64中。

这是由于项目的构建配置平台与计算机上安装的Microsoft Access数据库引擎不匹配。

为了解决此错误:

  • 在Visual Studio中更改构建配置平台
  • 确保匹配
  • 计算机上的Microsoft Access数据库引擎版本
  • 重新编译并运行您的项目
  • 现在应解决运行时错误

答案 1 :(得分:2)

我有同样的错误。当我将Provider=Microsoft.ACE.OLEDB.12.0;更改为Provider=Microsoft.ACE.OLEDB.16.0;并运行Office 2016时,此问题已修复。

答案 2 :(得分:0)

我可以提出一个可怕的解决方案,但是当您承受压力时,它会起作用。 打开Excel文件并将其另存为xls文件而不是xlsx。安装ACEOLEDB.12 32位版本并以这种方式提取数据。 这不是答案,但是可以作为解决方法。

在大多数情况下,SQL Server中的“平面文件”导入选项可以正常工作。

答案 3 :(得分:0)

我遇到了类似的问题,并使用修复选项重新安装了Microsoft Access数据库引擎。它为我工作。

答案 4 :(得分:0)

我同时拥有64位和32位版本,并且我遇到了同样的问题。我只是转到项目的属性,在“构建”选项卡中,取消选中“首选32位”的框。

答案 5 :(得分:0)

就我而言,我安装了Office 2013 x64。然后,我安装了AccessDatabaseEngine2016_X64.exe,然后使用“ / quiet”开关安装了AccessDatabaseEngine2016.exe。我发现,如果我先安装x86引擎,我会得到您看到的错误,因此订购很重要。我也将连接字符串更改为Provider=Microsoft.ACE.OLEDB.16.0(这似乎可以提供更好的OleDb错误报告)。

您可以使用ODBC数据源来验证驱动程序的安装。