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";
どうすれば解決できますか?
これは通常、Visual Studioのビルド構成プラットフォームが正しくない場合に発生します。これは、x86とx64の両方のビルド構成プラットフォームで発生する可能性があります。
これは、プロジェクトのビルド構成プラットフォームと、マシンにインストールされているMicrosoftAccessデータベースエンジンとの不一致が原因です。
このエラーを解決するには:
私は恐ろしい解決策を提案することができますが、あなたがプレッシャーにさらされているとき、それはうまくいきます。 Excelファイルを開き、xlsxではなくxlsファイルとして保存します。 ACEOLEDB.12 32ビットバージョンをインストールし、その方法でデータをプルします。これは答えではありませんが、回避策としては十分かもしれません。
ほとんどの場合、SQLServerオプションでの「フラットファイル」インポートは問題なく機能します。
同様の問題が発生し、修復オプションを使用してMicrosoftAccessデータベースエンジンを再インストールしました。それは私のために働いた。
同じエラーが発生しました。 Office2016を実行していたときにProvider=Microsoft.ACE.OLEDB.12.0;
をProvider=Microsoft.ACE.OLEDB.16.0;
に変更したときに修正されました。