Для всіх тих, хто все ще впливає на це.
Я отримую помилку ...
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 встановлена, та використати відповідний номер версії.