web-dev-qa-db-ja.com

OleDbConnectionは、「外部コンポーネントが例外をスローしました」を取得します。

Windowsフォームアプリケーションを使用してデータをExcelにエクスポートしています。

アプリケーションはx64とx86の両方で構築されています。

したがって、同じコンピューターでアプリケーションを動作させるには、両方のバージョンのMicrosoft Access DatabseEngineをインストールする必要があります。

まず、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";

どうすれば解決できますか?

11
Anil Kocabiyik

これは通常、Visual Studioのビルド構成プラットフォームが正しくない場合に発生します。これは、x86とx64の両方のビルド構成プラットフォームで発生する可能性があります。

これは、プロジェクトのビルド構成プラットフォームと、マシンにインストールされているMicrosoftAccessデータベースエンジンとの不一致が原因です。

このエラーを解決するには:

  • VisualStudioでビルド構成プラットフォームを変更します
  • 一致することを確認してください
  • マシン上のMicrosoftAccessデータベースエンジンのバージョン
  • プロジェクトを再コンパイルして実行します
  • 実行時エラーが解決されるはずです
6
Katia

私は恐ろしい解決策を提案することができますが、あなたがプレッシャーにさらされているとき、それはうまくいきます。 Excelファイルを開き、xlsxではなくxlsファイルとして保存します。 ACEOLEDB.12 32ビットバージョンをインストールし、その方法でデータをプルします。これは答えではありませんが、回避策としては十分かもしれません。

ほとんどの場合、SQLServerオプションでの「フラットファイル」インポートは問題なく機能します。

0
Jamie

同様の問題が発生し、修復オプションを使用してMicrosoftAccessデータベースエンジンを再インストールしました。それは私のために働いた。

0
Annia Martinez

同じエラーが発生しました。 Office2016を実行していたときにProvider=Microsoft.ACE.OLEDB.12.0;Provider=Microsoft.ACE.OLEDB.16.0;に変更したときに修正されました。

0
user2891329