'Microsoft.ACE.OLEDB.12.0' プロバイダーがローカルマシンに登録されていません。

ボタンのクリックイベントでExcelファイルからデータを取得しようとしています。私の接続文字列は、次のとおりです。

 string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\source\\SiteCore65\\Individual-Data.xls;Extended Properties=Excel 8.0;";

ボタンをクリックすると、以下のエラーが発生しました。

'Microsoft.ACE.OLEDB.12.0'The provider is not registered on the local machine.

これを修正する方法が全く分かりません。私のオペレーティングシステムは、Windows 7です。

質問へのコメント (6)
ソリューション

さて、インストールする必要があります。あなたが探しているのは

解説 (12)

'Microsoft.ACE.OLEDB.12.0' プロバイダーを使用できるようにする 'Microsoft Access Database Engine 2010 Redistributable' の64ビット版は、こちらから入手できます:
http://www.microsoft.com/en-us/download/details.aspx?id=13255

受付回答からダウンロードしたものを使用する場合、@backtestbroker.com さんのご指摘の通り、x86用にビルドする必要があります。

解説 (8)

接続を使用するアプリ(32 / 64ビット)に応じて、インストールするだけです。

-[2007年アクセスエンジン(32ビットのみ)][1]。 -[アクセス2010(32& 64ビット)][2]。 -[2013年のフルタイムアクセス(32& 64ビット。 ! > 200mb)][3]。 -[アクセス2016ランタイム][4]。

概要:

-2007〜2016年のすべてのオフィスには、プロバイダー「Microsoft.ACE.Oledb.12.0」が含まれています。 -アプリケーションアーキテクチャに応じて、適切なランタイムエンジン(32/64)を選択します。 -32ビットシェルと64ビットシェルの両方からパワーシェルコマンドを使用してプロバイダーを確認します:

    (New-Object system.data.oledb.oledbenumerator)。GetElements()| SOURCES_NAME、SOURCES_DESCRIPTIONを選択します。

-そして、あなたはあなたのシステムが使用できるプロバイダーを見るでしょう。

長い話: 文字列はhttp://live.sysinternals.com/strings.exeで見つけることができます。

例えば。 32ビットドライバがインストールされている64ビットシステム。

strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE12\MSO.DLL" | findstr "ACE.O"
strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE14\MSO.DLL" | findstr "ACE.O"
strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE15\MSO.DLL" | findstr "ACE.O"

2016年の次のオフィスでも。

c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX64\Microsoft Shared\OFFICE16\MSO.DLL
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\MSO.DLL

文字列が見つかります。

-Microsoft.ACE.OLEDB。

- Microsoft.ACE.Oledb.12.0

Office 2013にはcsi.dllも付属しています。

c:\Program Files (x86)\Common Files\microsoft shared\OFFICE15\Csi.dll
c:\Program Files\Common Files\Microsoft Shared\OFFICE15\Csi.dll

Microsoft.ACE.OLEDB.15.0 」が含まれています。

およびOffice 2016。

c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX64\Microsoft Shared\OFFICE16\Csi.dll
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\Csi.dll

Microsoft.ACE.OLEDB.16.0 」バージョンがあります。

[1]:http://www.microsoft.com/en-us/download/details.aspx?id = 23734。 [2]:http://www.microsoft.com/en-us/download/details.aspx?id = 13255。 [3]:http://www.microsoft.com/en-us/download/details.aspx?id = 39358。 [4]:http://www.microsoft.com/en-us/download/details.aspx?id = 50040。

解説 (4)

最初に確認する必要があるのは、アプリケーションのビルド構成です。

- x86プラットフォームの下でプロジェクトを構築している場合、そのために。 次のパッケージをインストールする必要があります。 機械:

1。 「Microsoft.ACE.OLEDB.12.0」プロバイダーを使用するには、以下が必要です。
   ** Microsoft Access Database Engine 2010 Redistributable **をインストールします。
   まず、このインストールは次の場所にあります。
   http://www.microsoft.com/download/en/details.aspx?id = 13255。 .

 インストールが完了したら、アプリケーションを実行してみてください(これの場合)。
   問題を解決します。解決しない場合は、ステップ2に進みます。

2。 この次のステップは、Officeで機能する原因不明の作業です。
   2010年は、Office 2007のデータ接続コンポーネントですが。  なぜこれが機能するのかはよくわかりませんが、実際に機能し、ほとんどすべての場合に機能することが証明されています。 ** 2007 Office System Driver:Data Connectivity Components **をインストールする必要があります。このインストールは次の場所にあります。
   http://www.microsoft.com/download/en/confirmation.aspx?id = 23734。 .

 このインストールが完了したら、アプリケーションを実行してみてください。これで問題が解決します。

-x64またはAnyCPUで構築されたアプリケーションを実行しようとしている場合。 プラットフォーム、最初にそれが期待どおりに実行されることを検証することをお勧めします。 x86プラットフォームの下。 その下で実行されない場合。 x86プラットフォーム、最初の部分の手順を実行し、それを検証します。 期待どおりに動作します。

私は、OLEDBデータベースを含むMS Accessドライバーを読みました。 ドライバーはx86プラットフォームの下でのみ動作し、下では互換性がありません。 x64またはAnyCPUプラットフォーム。 しかし、これは真実ではないようです。 私。 x86を構築するときにアプリケーションが実行されていたことを確認し、次にI パッシブフラグを使用してAccess Database Engineをインストールしました。

1。 まずファイルをローカルにダウンロードしますインストールをダウンロードできます。
   ここ:http://www.microsoft.com/en-us/download/details.aspx?id = 13255。
2。 「/ passive」フラグを使用してコマンドプロンプトを使用してインストールします。   **に。
   コマンドプロンプトは次のコマンドを実行します。
   'AccessDatabaseEngine_x64.exe / passive' **。

これらの2つのステップの後、私はなんとか組み込み後にアプリケーションを実行することができました。 x64またはAnyCPUビルド構成。 これは私の問題を解決するように見えました。

注:ステップの順序は違いを生むようですので、それに応じて従ってください。

解説 (4)

Visual Studio 2010で、構成マネージャのダイアログボックスでビルドを"x86"から"任意のCPU"に変更すると、このエラー/例外が発生しました。 このOLEDBデータベースドライバーは、x86でしか動作せず、64bitには対応していないと理解しています。 ビルド構成をx86に戻すと、私の場合は問題が解決しました。

解説 (2)

MSドライバーをインストールしましたが、それでもうまくいきませんでした。 次に、問題を解決したこのブログ投稿を見つけました。 そこで読んでください。それ以外の場合は、これら2つの画像(その投稿からリンクされている)をTLDRの要約として使用してください。

。![ここに画像の説明を入力してください](http://i.stack.imgur.com/rafsj.png。)

。![ここに画像の説明を入力してください](http://i.stack.imgur.com/zKZ9p.png。)

解説 (7)

64ビットを使用しているが、AccessDatabaseEngineをインストールした後でも問題がある場合は、この投稿を参照してください。問題が解決しました。

つまり. [ this AccessDatabaseEngine][2]をインストールする必要があります。

[2]:http://www.microsoft.com/download/en/confirmation.aspx?id = 23734。

解説 (0)

まだこれに影響を受けているすべての人のために。

エラーが発生しています。..

OLEDB error "The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine."

OP、Shailesh Sahuによって記述されたとおり。. 64ビットWindows 7を持っています。

私の問題は PowerShell スクリプト内にありますが、OPの投稿と同様の接続文字列を使用しているため、C#、PowerShell、および「Microsoft.ACE.OLEDB」ドライバーに依存するその他の言語に私の発見を適用できることを願っています。

私はこのMSフォーラムスレッド(http://goo.gl/h73RmI)の指示に従いました

最初に 64ビットバージョンをインストールしてから、このページから 32ビットバージョンのAccessDatabaseEngine.exeをインストールしてみました。 http://www.microsoft.com/en-us/download/details.aspx?id = 13255。

しかし、まだ喜びはありません。

次に、 PowerShell で以下のコードを実行しました(SQL Pandaのサイトhttp://goo.gl/A3Hu96から)。

(New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION 

。これでこの結果が得られました(簡潔にするために他のデータソースを削除しました)。.

SOURCES_NAME              SOURCES_DESCRIPTION                                                                       
------------              -------------------                                                                       
Microsoft.ACE.OLEDB.15.0  Microsoft Office 15.0 Access Database Engine OLE DB Provider

ご覧のとおり、Microsoft.ACE.OLEDB。 15 .0(15)はMicrosoft.ACE.OLEDBではありません。 12 .0(12)。

それで、接続文字列を15に修正し、うまくいきました。

したがって、バージョンをソフトコーディングする方法を示す簡単なPowerShellスニペット。..

$AceVersion = ((New-Object System.Data.OleDb.OleDbEnumerator).GetElements() | Where-Object { $_.SOURCES_NAME -like "Microsoft.ACE.OLEDB*" } | Sort-Object SOURCES_NAME -Descending | Select-Object -First 1 SOURCES_NAME).SOURCES_NAME

$connString = "Provider=$AceVersion;Data Source=`"$filepath`";Extended Properties=`"Excel 12.0 Xml;HDR=NO`";"

複数の場合は、最新のACEバージョンを選択するように修正されました

うまくいけば、これを見つけた人なら誰でも、インストールされているOLEDBバージョンを確認し、適切なバージョン番号を使用できます。

解説 (3)

オフィスの設置のビットに基づいて、ソリューションプラットフォームを「任意のCPU」から「x86」または「x64」に変更する必要があります。

手順は以下に示されています。

1。 Solution ExplorerのSolutionファイルを右クリックします。 。![ここに画像の説明を入力してください](http://i.stack.imgur.com/pD0Jt.png。)

2。 構成マネージャーをクリックします。 3。 [アクティブプラットフォームドロップダウン]をクリックします。x86が既にある場合は、それを選択し、[新規]をクリックします。 。![ここに画像の説明を入力してください](http://i.stack.imgur.com/HxZtk.png。)

4。 新しいプラットフォームのドロップダウンからx86またはx64を選択します。 。![ここに画像の説明を入力してください](http://i.stack.imgur.com/cs3RE.png。)

アプリケーションをコンパイルして実行します。

解説 (0)

多くの答えが出されていますが、私が遭遇した問題はまだ言及されていません。

-マイシナリオ: 64ビットアプリケーション、Win10-64、Office 2007 32ビットがインストールされています。 -MSからダウンロードした32ビットインストーラーのインストール AccessDatabaseEngine.exe 。 Powershellで検証されたように、成功を報告しますが、インストールされません。 上記の投稿の1つのスクリプト。

-64ビットインストーラーのインストール AccessDatabaseEngine_X64.exe は、衝撃的なエラーメッセージを報告しました:

。![ここに画像の説明を入力してください](https://i.stack.imgur.com/j3XSm.png。)

非常に単純な解決策がここ Autodeskサイトで見つかりました。 このように、パラメータ/ passiveをコマンドライン文字列に追加するだけです。

AccessDatabaseEngine_X64.exe / passive。

インストールが成功し、OleDbドライバーが動作しました。

OleDbで処理しているExcelファイルはxlsxタイプで、EPPlus 4.5で作成され、Excel 2007で変更されています。

解説 (1)

Webプロジェクトをデバッグする場合は、プロジェクトの設定に応じて、 IIS Express が32ビットまたは64ビットで実行されていることを確認してください。

後 ⁇ 。

ツール>オプション>プロジェクトとソリューション> Webプロジェクト。

そこから、IIS Expressの64ビットバージョンを確認します(またはチェックを外します)。..'。

解説 (1)

インストールされた「AccessDatabaseEngine」がまだ役に立たない場合は、以下が解決策です。

Active Solution Platformを「Any CPU」から「x86」に変更する必要があります。

OLEDBプロバイダーはローカルマシンに登録されていません

CodeProject.comから。

解説 (2)

この記事の手順に従ってこれを修正することができました:http://www.mikesdotnetting.com/article/280/solved-the-microsoft-ace-oledb-12-0-provider-is-not-registered -on-the-local-machine。

私にとっての重要なポイントはこれでした。

IISでデバッグするとき。

デフォルトでは、Visual Studioは32ビットバージョンを使用します。 これを変更できます。 ツール&#187にアクセスして、Visual Studio内から。オプション»プロジェクトと。 ソリューション» Webプロジェクト»一般、そして選択。

「ウェブサイトやプロジェクトにIIS Expressの64ビットバージョンを使用してください」。

そのオプションを確認した後、プロジェクトのプラットフォームターゲットを「任意のCPU」に戻しました(トラブルシューティングプロセスのどこかでx86に設定しました)。エラーを克服することができました。

解説 (1)

まず、システムにインストールされているmicrosoft.ace.oledb.12.0のバージョンを確認します。

以下のパスを確認してくださいC:\ Program Files \ Common Files \ Microsoft Shared \ OFFICE14 \ ACEOLEDB.DLL --64ビットがインストールされています。

以下のパスを確認してくださいC:\ Program Files(x86)\ Common Files \ Microsoft Shared \ OFFICE14 \ ACEOLEDB.DLL --x86ビットがインストールされています。

(x86)がインストールされている場合は、構成マネージャーを使用してソリューションプラットフォームをx86に変更し、x64をx64に変更します。

利用できない場合は、以下のリンクを使用してインストールします。

https://www.microsoft.com/en-us/download/details.aspx?id = 23734。

解説 (0)

SSMS 2014を使用してExcelファイル(xlsx)からSQL Server DBにデータをインポートしようとしたときに、この問題がありました。

[2007 Office System Driver:Data Connectivity Components][1]のインストールは、私にとってトリックでした。

[1]:https://www.microsoft.com/en-us/download/confirmation.aspx?id = 23734。

解説 (1)

syp_dino、。

"Microsoft.ACE.OLEDB.12.0'プロバイダーがローカルマシンに登録されていない" エラーに対して提案した解決策は、アクティブソリューションプラットフォームを "Any CPU"から "x86"に変更することです。

これらの手順を実行してソリューションを再構築し、EXEをつかんでネットワークに配置すると、すべてがWindows 7 64ビットマシンでスムーズに動作しました。

解説 (2)

ダウンロードするだけです。次のAccess DBエンジン(X86またはX64:マシン構成による)をインストールし、魔法を見てください:)。

https://www.microsoft.com/en-us/download/confirmation.aspx?id = 13255。

解説 (0)

Excelファイルを読んでいるときも同様の問題があります。

問題の履歴:

メモリの要件のため、最近アプリケーションを32ビットから64ビットに移行しました。 そのため、Windows 7を32ビットから64ビットに移行しました。 しかし、それでも私たちはマシンに32ビットオフィスを設置しました。

このため、Excelデータをアプリケーションにインポートするときにこの問題が発生しました。

ソリューション、。

http://www.microsoft.com/en-us/download/details.aspxの64ビットバージョンをダウンロードしました?id = 13255および引数としてインストールされます。

AccessDatabaseEngine_x64.exe / passive。

コードを変更しないと、問題が解決します。

注:

64ビットOSと64ビットオフィスでは、この修正なしで私の機能は正常に機能していました。 この修正は、32ビットオフィスがインストールされている64ビットOSでアプリケーションが64ビット実行されている場合にのみ必要です。

解説 (1)

私も同じ問題に直面しました。 ソリューションのプロパティに移動し、任意のCPUをx86に変更します。これでうまくいくと思います。

解説 (0)

これを行う2つのステップ: 1。 このメニュー:プロジェクト-> yourprojectプロパティ。.. ->ビルド:[32ビットを優先]のチェックを外します。 2。 in connectionString:次のように、拡張プロパティの前後にクオートを記述します:Extended Properties = 'Excel 12.0 Xml; HDR = YES'。

                var fileName = string.Format( "{{{{{{{0}}}}}}}"、openFileDialog1.FileName);。
            // var connectionString = string.Format( "Provider = Microsoft.Jet.OLEDB.4.0; data source = {{{{{{{0}}}}}}}; Extended Properties = Excel 8.0;"、fileName);。
            var connectionString = string.Format( "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = {{{{{{{0}}}}}}}; Extended Properties = 'Excel 12.0 Xml; HDR = YES'"、fileName);。
            varアダプター=新しいOleDbDataAdapter( "SELECT * FROM [Sheet1 $]"、connectionString);。
            var ds = new DataSet();。

            adapter.Fill(ds、TableNmae);。

            DataTableデータ= ds.Tables [TableNmae];。
            dg1.DataSource =データ;。
解説 (1)