web-dev-qa-db-ja.com

'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'プロバイダーはローカルコンピューターに登録されていません。

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

347
Shailesh Sahu

まあ、あなたはそれをインストールする必要があります。あなたが探しています:

443
Variant

「Microsoft.ACE.OLEDB.12.0」プロバイダーを使用できるようにする64ビットバージョンの「Microsoft Accessデータベースエンジン2010再頒布可能パッケージ」は、こちらから入手できます。
http://www.Microsoft.com/ja-jp/download/details.aspx?id=13255

承認された回答からのダウンロードを使用する場合は、@ backtestbroker.comによって指摘されているように、x86用にビルドする必要があります。

129
rsbarro

アプリによっては(32/64ビット)あなただけのインストール可能な接続を使用して

概要:

  • 2007-2016年からのすべてのオフィスはプロバイダー "Microsoft.ACE.Oledb.12.0"を含んでいます
  • アプリケーションアーキテクチャに応じて、適切なランタイムエンジンを選択してください(32/64)
  • 32ビットと64ビットの両方のシェルからpowershell-command を使用してプロバイダを確認してください

    (New-Object system.data.oledb.oledbenumerator).GetElements() | select 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 "が含まれています。

とオフィス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 "バージョンを持っています

56
Bernhard

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

  • x86プラットフォームでプロジェクトをビルドしたものをお持ちの場合、あなたが問題を解決するためには以下のパッケージをあなたのマシンにインストールしてください:

    1. 'Microsoft.ACE.OLEDB.12.0'プロバイダーを使用するには、最初にMicrosoft Accessデータベースエンジン2010再配布可能ファイルをインストールしてください _が必要です。このインストールは、次のサイトから入手できます。 http://www.Microsoft.com /download/en/details.aspx?id=13255

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

    2. この次のステップは、Office 2007のData Connectivity Componentsであるにもかかわらず、Office 2010で機能する、原因不明の回避策です。これが機能する理由はよくわかりませんが、機能し、ほとんどすべてのケースで機能することが証明されています。 2007 Office systemドライバをインストールする:データ接続コンポーネントが必要です。このインストールは、次のサイトから入手できます。 http://www.Microsoft.com/download/en/confirmation.aspx?id=23734

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

  • x64またはAnyCPUプラットフォームでビルドされたアプリケーションを実行しようとしている場合は、まずx86プラットフォームで正常に動作することを検証することをお勧めします。そのx86プラットフォームで実行されない場合は、最初の部分のステップを実行して、それが予想どおりに実行されることを検証してください。

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

    1. 最初にファイルをローカルにダウンロードするインストールはここからダウンロードできます。 http://www.Microsoft.com/ja-jp/download/details.aspx?id=13255
    2. '/ passive'フラグを指定してコマンドプロンプトを使用してインストールする。 コマンドプロンプトで、次のコマンドを実行します。 'AccessDatabaseEngine_x64.exe/passive'

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

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

33
Merav Kochavi

Visual Studio 2010では、Configuration Managerダイアログボックスでビルドを "x86"から "Any CPU"に変更したときに、このエラー/例外が発生しました。私が理解しているこのOLEDBデータベースドライバはx86でしか動作せず、64ビット互換ではありません。ビルド設定をx86に戻すことで問題は解決しました。

30

私はMSドライバをインストールしましたが、それでもまだうまくいきませんでした。それから私は このブログ記事 を見つけて問題を解決しました。それをそこで読んでください、さもなければTLDR要約としてこれらの2つのイメージ(その記事からリンクされた)を使用してください:

enter image description here

enter image description here

22
Shaul Behr

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

つまり、 this AccessDatabaseEngine をインストールする必要があります。

15
Aximili

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

私はエラーを受けています...

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

最初に64bitバージョンをインストールし、次にこのページから32bitバージョンのAccessDatabaseEngine.exeをインストールしてみました http://www.Microsoft.com/ja-jp/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. 15 。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のバージョンを確認して適切なバージョン番号を使用できるようになります。

14
TechSpud

あなたは、オフィスインストールのビット数に基づいて、ソリューションプラットフォームを "Any CPU"から "x86"または "x64"に変更する必要があります。

手順は以下のとおりです。

  1. ソリューションエクスプローラーでソリューションファイルを右クリック: enter image description here

    1. 構成マネージャをクリックします。
    2. アクティブプラットフォームのドロップダウンをクリックし、x86がすでに存在する場合はそれを選択し、それ以外の場合は新規をクリックします。 enter image description here

    3. 新しいプラットフォームのドロップダウンからx86またはx64を選択します。 enter image description here

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

6
mohit busa

私はこの記事の手順に従ってこれを修正することができました: http://www.mikesdotnetting.com/article/280/solved-the-Microsoft-ace-oledb-12-0-provider-is-not-ローカルマシンに登録

私にとっての要点はこれでした:

IISでデバッグするとき

デフォルトでは、Visual Studioは32ビットバージョンを使用します。これはVisual Studio内から変更するには、ツール→オプション→プロジェクトとソリューション→Webプロジェクト→一般の順に選択して選択します。

"Webサイトやプロジェクトには64ビットバージョンのIIS Expressを使用する"

そのオプションをチェックし、それから私のプロジェクトのプラットフォームターゲットを "Any CPU"(トラブルシューティングプロセスのどこかでx86に設定していた)に戻すと、私はエラーを克服することができた。

4
Ken Johnson

それでもインストールされた "AccessDatabaseEngine"が解決しない場合は、以下の解決策があります。

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

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

CodeProject.comから

4
syp_dino

最初に、ご使用のシステムにどのバージョンのMicrosoft.ace.oledb.12.0がインストールされているかを確認してください。

パスC:¥Program Files¥Common Files¥Microsoft Shared¥OFFICE14¥ACEOLEDB.DLL - 64 bitがインストールされています。

パスC:¥Program Files(x86)¥Common Files¥Microsoft Shared¥OFFICE14¥ACEOLEDB.DLL - x 86 bitがインストールされているパスでチェックイン

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

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

https://www.Microsoft.com/ja-jp/download/details.aspx?id=23734

3
Shubham Tiwari

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

後藤

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

そしてそこから 'Use 64 bit version _ IIS Express ...をチェック(またはチェック解除)します。

3
Albert Zakhia

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

2007 Office System Driver:Data Connectivity Components installが私にとってトリックでした。

3
Taran

syp_dino、

あなたが "Microsoft.ACE.OLEDB.12.0 'プロバイダーのために提案したように私のための解決策はローカルマシンに登録されていません エラーはActive Solution Platformを" Any CPU "から" x86 "に変更することです。

私がこれらのステップを実行し、ソリューションを再構築し、EXEをつかみ、そしてネットワーク上に置いたとき、すべてがWindows 7 64ビットマシン上でスムーズに働いた。

3
Sevron Ghee

私はこれと同じ問題に直面しました。 Solution Propertiesに行き、Any CPUをx86に変更してください。

2
Md Shahriar

次のAccess DBエンジン(X86またはX64:お使いのマシンの設定に応じて)をダウンロードしてインストールし、魔法を見てください:)

https://www.Microsoft.com/ja-jp/download/confirmation.aspx?id=13255

2
Biki

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

問題の歴史:

メモリ要件のため、最近アプリケーションを32ビットから64ビットに移行しました。そのために私達は私達の窓7を32ビットから64ビットに移行しました。それでも私たちのマシンに32ビットのOfficeをインストールしました。

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

溶液、

64ビット版の http://www.Microsoft.com/en-us/download/details.aspx?id=13255 をダウンロードし、引数を付けてインストールしました。

AccessDatabaseEngine_x64.exe /パッシブ

コードを変更しなくても問題は解決します。

注意:

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

2
Rahul Techie

私は他の人の指示に従った。このパッチをインストールし、そのパッチとMicrosoft Access Database Engine 2010をインストールします。

私の問題は、私は自分のマシンの2つのサイトで同じライブラリ(linq2sql)を使用しているということでした。 1が動作し、1が動作しません。

結局、私は仕事をしていないサイトのためにapppoolの詳細設定で "32ビットアプリケーションを有効にする"必要があることに気づきました。

すべてうまくいった。

1
Ads

これは私にとって今うまくいきました。

  1. このページ にアクセスし、あなたのコンピュータ用の適切なパッケージをダウンロードしてください(AccessDatabaseEngine.exeまたはAccessDatabaseEngine_X64.exe)。
  2. それをインストールしてください。
  3. Enjoye ...あなたのコードは現在機能しています...

しかし、あなたのアプリケーションパッケージのためにあなたは以下の解決策を使うことができます:

  1. 「C:¥Program Files(x86)¥Common Files¥Microsoft shared」または「C:¥Program Files¥Common Files¥Microsoft Shared」に移動し、「OFFICE14」ディレクトリをパッケージファイルと同じ場所に置きます。

または

  1. インストールパッケージに(item 1の)2つのプロジェクトを添付します。

Webアプリケーションのサーバーに AccessDatabaseEngine をインストールすることを忘れないでください。

1
sosha

Microsoft Accessデータベースエンジン2010再配布可能 は既に自分のマシンにインストールされていましたが、まだ Microsoft ACE OLEDB Provider エラーを受け取っていました。

それから私は私が最近Office 2016にアップグレードしたことを思い出したので、私は Microsoft Accessデータベースエンジン2010再配布可能 を再インストールしてみるべきでしょうか。そしてそれは私のマシン上の問題を修正しました。

そのため、MS Officeの異なるバージョンにアップグレードした、またはMS Officeを修復/再インストールした場合は、他の修正を見つけることに時間を浪費する前に Microsoft Accessデータベースエンジン2010再配布可能 を再インストールしてください。がんばろう!

1
Sagar

次の2つの手順を実行します。1.このメニューで:project - > yourproject properties ... - > Build:「prefer 32-bit」のチェックマークを外します。 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 adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString);
            var ds = new DataSet();

            adapter.Fill(ds, TableNmae);

            DataTable data = ds.Tables[TableNmae];
            dg1.DataSource = data;
1
Sharif Lotfi

ASP.NETアプリケーションからACEを使用しようとしたときにこのエラーが発生した場合、最も可能性の高い原因は32ビットバージョンのいずれかをインストールしたことです。デフォルトでは、64ビットオペレーティングシステムのIISは、64ビットワーカープロセスでアプリケーションを実行します。 64ビットプロセスは32ビットDLLをロードできません。 ACEプロバイダへの呼び出しが行われると、64ビットプロセスは64ビットDLLを見つけようとします。それが存在しない場合は、ここにあなたをもたらしたエラーメッセージが表示されます。

この場合、2つの選択肢があります。まず、2010 64ビット版をインストールできます。 2007 32ビット版をインストールしている場合は、それと並行して2010 64ビット版をインストールするだけです。 32ビット版の2010がインストールされている場合は、それをアンインストールして代わりに64ビット版の2010をダ​​ウンロードしてインストールする必要があります。 32ビット版と64ビット版の2010年プロバイダーを同時にインストールすることはできません。開発用コンピュータでインストールを実行している場合は、既存のOfficeインストールの煩雑さによっても制約を受ける可能性があります。

2番目のオプションは、32ビットアプリケーションを有効にするためにIISのアプリケーションプールを変更することです。フルバージョンのIISを使用している場合は、管理ツールを使用してこれを実行できます(コントロールパネル→管理ツール→インターネットインフォメーションサービス(IIS)マネージャ)。

より多くの理解のために以下を参照してください リンク

1
Prince Antony G

1.) ConnectionStrings.com で接続文字列を確認します。

2.)正しいデータベースエンジンがインストールされていることを確認してください。これらは私を助けた2つのデータベースエンジンでした。

Microsoft Accessデータベースエンジン2010の再配布可能

2007 Office System Driver:データ接続コンポーネント

3.)ビルドターゲットプラットフォームが "Any CPU"の場合は問題があるかもしれません。 "X86"(Properties、Build、Platform Target)である必要があります。

1
u8it

またこれらのステップを試みることができます

SQL Serverで、1つのデータベースを開きます。2.オプション「Server Obtect」をクリックします。3.「リンクサーバー」をクリックします。4.「プロバイダ」をクリックします。 6.すべてのオプションのチェックを外して閉じます

1
Diego Castro

私は同じ問題を抱えていたが、この場合 Microsoft-ace-oledb-12-0-provider はすでに私のマシンにインストールされており、開発された他のアプリケーションのためにうまく働いていた。

これらのアプリケーションと私が問題を抱えているアプリケーションの違いは、古いアプリケーションが " Local IIS "で実行されていたのに対し、エラーのあるアプリケーションは " IISで実行されていた_ Express (Visual Studioから実行している ")。だから私がやったのは

  1. プロジェクト名を右クリック。
  2. プロパティへ
  3. 右側のWebタブに移動します。
  4. Serversの下でLocal IISを選択し、Create Virtual Directoryボタンをクリックします。
  5. アプリケーションをもう一度実行するとうまくいきました。
1
NetStarter

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

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

  • 64ビットインストーラーのインストール AccessDatabaseEngine_X64.exe から、衝撃的なエラーメッセージが報告されました。

enter image description here

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

AccessDatabaseEngine_X64.exe /パッシブ

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

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

0
josh
  • 私は何日も同じ問題に直面しています。私は64ビット用のOLEDBドライバをインストールしました、マイクロソフトのウェブサイトで利用可能である32ビットも試しました。
  • 私は何とかそれが動作しませんでしたまた、オフィス64ビット版を再インストールしようとしました。 IISプールで32ビットアプリケーションを許可しようとしました。
  • プロジェクト環境をX86、AnyMachine、Mixedに変更しようとしました。そして、ほとんど私がインターネット上で見つけることができたすべてのパッチを試してみました。しかし、すべての解決策は私をがっかりさせました。
  • 私は私たちがダウンロードしていたプロバイダが最新であり、それと一緒に働いていなかったことをついに知るようになりましたが。
  • 私はそれをアンインストールし、インストールしましたoledb drivers 14.0.7015.1000 。私は会社のリソースから入手したように私はそれのためのリンクを持っていない、あなたはそれをグーグルする必要があるかもしれませんがそれは動作します。私はこれに来ましたMicrosoftのダウンロードリンクそれはまた働きました...しかしそれはバージョン 14.0.6119.5000 ですそれは働きました。
0
Maulik Modi

私が別のコンピュータでそれを解決した方法:

私は、Office 2010を持っていないので、Accessデータベースを持っていなかったVisual Studio 2012が付いているWindows 7 32ビットマシンを持っています。

だから、私はここから他の人からの提案に従ってそれをダウンロードした後、私はこのWindows 7 32ビットマシンにAccessDatabaseEngineをインストールし、そしてすべてがうまくいった。

私はまだAccess 2010を既に含んでいるOffice 2010を既に持っている私のWindows 7 64ビットマシンで問題を抱えていました。このコンピュータで解決した方法はPROJECTに入ることでした。 32ビット再コンパイル/ビルドし、Microsoft.ACE.OLEDB.12.0 'プロバイダーがローカルマシンに登録されていないというメッセージが消えました。

0
Humbert

それはあなたがそれを実行できるようにするためにx64としてアプリケーションをコンパイルする必要があります、それであなたがそれをx36上で実行したいならあなたが受け入れるためにオフィスx86をインストールする必要が上記のすべての解決策が、私は私がオフィスx64bitを持っていたことに気付いたときまでどれもうまくいきませんでした。

0
Maina Wycliffe

ExcelファイルからMS-SQLにデータをインポートすると、このエラーが発生しました。プロバイダはすでにインストールされていて(64ビット)、なぜうまく動かなかったのか私は驚きました。だから私がしたのは、ここで使用されているインポート/エクスポートアプリケーション、つまり.EXEを見つけることだけでした。そして私はそれを見つけました

C:¥Program Files¥Microsoft SQL Server¥130¥DTS¥Binn¥DTSWizard.exe

その後、データのインポートを実行するために直接.exeを実行しました。そしてそれはうまくいった!

0
Chagbert