これによってまだ影響を受けているすべての人のために。
私はエラーを取得しています...
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 ビットバージョンをインストールしてから、このページhttp://www.microsoft.com/en-us/download/details.aspx?id=13255から32 ビットバージョンの AccessDatabaseEngine.exe を
インストールしてみました。
しかし、まだ喜びはありません。
次に、 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 のバージョンを確認し、適切なバージョン番号を使用できるようになります。