ボタンのクリックイベントで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です。
さて、インストールする必要があります。あなたが探しているのは
'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用にビルドする必要があります。
接続を使用するアプリ(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。
最初に確認する必要があるのは、アプリケーションのビルド構成です。
- 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ビルド構成。 これは私の問題を解決するように見えました。
注:ステップの順序は違いを生むようですので、それに応じて従ってください。
64ビットを使用しているが、AccessDatabaseEngineをインストールした後でも問題がある場合は、この投稿を参照してください。問題が解決しました。
つまり. [ this AccessDatabaseEngine][2]をインストールする必要があります。
[2]:http://www.microsoft.com/download/en/confirmation.aspx?id = 23734。
まだこれに影響を受けているすべての人のために。
エラーが発生しています。..
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バージョンを確認し、適切なバージョン番号を使用できます。
多くの答えが出されていますが、私が遭遇した問題はまだ言及されていません。
-マイシナリオ: 64ビットアプリケーション、Win10-64、Office 2007 32ビットがインストールされています。 -MSからダウンロードした32ビットインストーラーのインストール AccessDatabaseEngine.exe 。 Powershellで検証されたように、成功を報告しますが、インストールされません。 上記の投稿の1つのスクリプト。
-64ビットインストーラーのインストール AccessDatabaseEngine_X64.exe は、衝撃的なエラーメッセージを報告しました:
。。
非常に単純な解決策がここ Autodeskサイトで見つかりました。 このように、パラメータ/ passiveをコマンドライン文字列に追加するだけです。
AccessDatabaseEngine_X64.exe / passive。
インストールが成功し、OleDbドライバーが動作しました。
OleDbで処理しているExcelファイルはxlsxタイプで、EPPlus 4.5で作成され、Excel 2007で変更されています。
この記事の手順に従ってこれを修正することができました: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ビットバージョンを使用します。 これを変更できます。 ツール»にアクセスして、Visual Studio内から。オプション»プロジェクトと。 ソリューション» Webプロジェクト»一般、そして選択。
「ウェブサイトやプロジェクトにIIS Expressの64ビットバージョンを使用してください」。
そのオプションを確認した後、プロジェクトのプラットフォームターゲットを「任意のCPU」に戻しました(トラブルシューティングプロセスのどこかでx86に設定しました)。エラーを克服することができました。
まず、システムにインストールされている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。
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ビット実行されている場合にのみ必要です。
これを行う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 =データ;。