c# - 参照設定 - プロバイダはローカルのコンピュータに登録されていません。




「Microsoft.ACE.OLEDB.12.0」プロバイダーがローカルコンピューターに登録されていません (20)

私はボタンクリックイベントで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です。


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

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

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

microsoft.com/en-us/download/confirmation.aspx?id=23734

3.)ビルドターゲットプラットフォームに「Any CPU」という問題があり、「X86」(プロパティ、ビルド、プラットフォームターゲット)が必要な場合があります。



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


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

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

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


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

microsoft.com/en-us/download/confirmation.aspx?id=23734インストールは、私のためのトリックでした。


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


syp_dino、

"Microsoft.ACE.OLEDB.12.0 'プロバイダーがローカルコンピューターに登録されていないために提案した私のソリューションは、Active Solution Platformを「任意のCPU」から「x86」に変更するエラーです。

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


「Microsoft.ACE.OLEDB.12.0」プロバイダを使用できるようにする64ビット版の「Microsoft Access Database Engine 2010 Redistributable」がここにあります。
http://www.microsoft.com/en-us/download/details.aspx?id=13255

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



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

私はエラーを取得している...

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 : http://goo.gl/h73RmI

私は最初に64ビット版のインストールを試みた後、 32ビットバージョンのAccessDatabaseEngine.exeをこのページからインストールしましたhttp://www.microsoft.com/en-us/download/details.aspx?id=13255 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のバージョンがインストールされているかどうか確認し、適切なバージョン番号を使用することができます。


これらの手順を試すこともできます

SQL Serverでは、1つのデータベースを開く2.オプション 'サーバObtect'の2.Clic 'リンクサーバー'の4.Clic 'プロバイダー'の5.Clic 'Microsoft.ACE.OLEDB.12.0'の5.Clic Rigth 6.すべてのオプションをオフにして閉じる


それはあなたがインストールしているオフィスに依存します。もしx64ビットオフィスなら、アプリケーションをx64としてコンパイルして実行できるようにする必要があります。x36で実行したい場合は、オフィスx86をインストールしなければなりません。私はオフィスx64bitを持っていたので、私はx64としてアプリケーションを構築し、働いた



インストールすることができる接続を使用しているアプリ(32 / 64bit)に応じて

概要:

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

    (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 」バージョンを持つ


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

  • x86プラットフォームプロジェクトビルドした場合は、問題を解決するために、マシンに以下のパッケージをインストールする必要があります。

    1. 「Microsoft.ACE.OLEDB.12.0」プロバイダを使用するには、 まずMicrosoft Accessデータベースエンジン2010再配布可能ファイルをインストールする必要があります。このインストールは、次のhttp://www.microsoft.com/download/en/details.aspx?id=13255入手できますhttp://www.microsoft.com/download/en/details.aspx?id=13255 : http://www.microsoft.com/download/en/details.aspx?id=13255

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

    2. この次のステップは、Office 2010のデータコネクティビティコンポーネントであるにもかかわらず、Office 2010で機能する説明できない回避策です。これがなぜ機能するのかよく分かりませんが、ほとんどすべてのケースで機能することが証明されています。 2007 Office System Driver:Data Connectivity Componentsインストールする必要がありhttp://www.microsoft.com/download/en/confirmation.aspx?id=23734 。このインストールは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/en-us/download/details.aspx?id=13255 : http://www.microsoft.com/en-us/download/details.aspx?id=13255
    2. コマンドプロンプトで '/ passive'フラグを使用してインストールする。 コマンドプロンプトで、次のコマンドを実行します。 'AccessDatabaseEngine_x64.exe / passive'

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

注意:ステップの順序は違いがあるようですので、それに従ってください。



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


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


私は他の人の説明に従った。 このパッチのインストール、そのパッチのインストール、およびMicrosoft Access Database Engine 2010のインストールを行います。

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

最終的に私は、私の非稼動サイトのために、アプリケーションプールの高度な設定で「32ビットアプリケーションを有効にする」必要があることがわかりました。

すべて今はうまくいく。


私は同じ問題を抱えていましたが、このケースではmicrosoft-ace-oledb-12-0-providerが既に自分のマシンにインストールされていて、他のアプリケーションの開発にもうまくいきました。

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

  1. プロジェクト名を右クリックします。
  2. プロパティに移動
  3. 右側の[Web]タブに移動します。
  4. [サーバー]で[ローカルIIS]を選択し、[仮想ディレクトリの作成]ボタンをクリックします。
  5. アプリケーションを再度実行すると、正常に機能しました。






ole