Для всех тех, кто еще затронут этим.
Я получаю сообщение об ошибке ...
OLEDB error "The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine."
... как описано ОП, Шайлеш Саху.
У меня 64-битная Windows 7.
Моя проблема в сценариях PowerShell , но использует строку подключения, аналогичную сообщению ОП, поэтому, надеюсь, мои выводы могут быть применены к 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 (пятнадцать), а не Microsoft.ACE.OLEDB. 12 .0 (двенадцать)
Итак, я изменил строку подключения на 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 установлена, и использовать соответствующий номер версии.