Поставщик «Microsoft.ACE.OLEDB.12.0» не зарегистрирован на локальном компьютере - PullRequest
363 голосов
/ 11 июля 2011

Я пытаюсь получить данные из файла 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.

Ответы [ 33 ]

462 голосов
/ 11 июля 2011

Ну, вам нужно установить его. Вы ищете:

136 голосов
/ 22 февраля 2013

64-разрядная версия «Microsoft Access Database Engine 2010 Redistributable», которая позволит вам использовать поставщика «Microsoft.ACE.OLEDB.12.0», доступна здесь:
http://www.microsoft.com/en-us/download/details.aspx?id=13255

Если вы используете загрузку из принятого ответа, вам нужно будет собрать для x86, как указано @ backtestbroker.com.

60 голосов
/ 27 августа 2015

в зависимости от приложения (32 / 64bit) с использованием соединения, которое вы можете просто установить

Резюме:

  • все офисы 2007-2016 гг. Содержат провайдера "Microsoft.ACE.Oledb.12.0"
  • в зависимости от архитектуры вашего приложения выберите подходящий движок (32/64)
  • проверьте своих провайдеров с помощью команды powershell из 32- и 64-битной оболочки :

    (New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION 
    
  • и вы увидите, какой провайдер может использовать ваша система

длинная история: Строки можно найти с http://live.sysinternals.com/strings.exe

например. в 64-битной системе с установленными 32-битными драйверами

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 "

35 голосов
/ 24 сентября 2015

Первое, что вам нужно проверить, - это конфигурация сборки вашего приложения.

  • Если вы создали свой проект на платформе x86 , то для Чтобы решить проблему, вы должны установить следующие пакеты на свой машина:

    1. Чтобы использовать поставщика «Microsoft.ACE.OLEDB.12.0», необходимо установить распространяемый Microsoft Access Database Engine 2010 Во-первых, эта установка доступна по адресу: http://www.microsoft.com/download/en/details.aspx?id=13255.

      После завершения установки попробуйте запустить приложение, если это решает проблему отлично, если нет, переходите к шагу 2.

    2. Этот следующий шаг - необъяснимый обходной путь, который работает для Office 2010, хотя это и есть Компоненты подключения к данным Office 2007. Я не совсем уверен, почему это работает, но это работает, и было доказано, что это работает почти во всех случаях. Вам необходимо установить драйвер системы Office 2007: компоненты для подключения к данным , эта установка доступна по адресу: http://www.microsoft.com/download/en/confirmation.aspx?id=23734.

      После завершения установки попробуйте запустить приложение, это должно решить проблему.

  • Если вы пытаетесь запустить приложение , созданное под x64 или AnyCPU платформа , я бы порекомендовал сначала проверить, что она работает как положено под платформой x86. Если он не работает под этим платформу x86, выполните шаги, описанные в первой части, и подтвердите, что работает как положено.

    Я читал, что драйверы MS Access, включая базу данных OLEDB Драйвер работает только на платформе x86 и несовместим с платформа x64 или AnyCPU. Но это, похоже, не соответствует действительности. я проверил, что мое приложение работало при сборке x86, затем я установил Access Database Engine, используя пассивный флаг.

    1. Сначала скачайте файл локально. Вы можете скачать инсталляцию здесь: http://www.microsoft.com/en-us/download/details.aspx?id=13255
    2. Установка с использованием командной строки с флагом / passive. В В командной строке выполните следующую команду: 'AccessDatabaseEngine_x64.exe / passive'

    После этих 2 шагов мне удалось запустить приложение после сборки в Конфигурация сборки x64 или AnyCPU. Похоже, это решило мою проблему.

Примечание: порядок шагов, кажется, имеет значение, поэтому, пожалуйста, следуйте соответствующим образом.

31 голосов
/ 15 февраля 2013

Я получил эту ошибку / исключение в Visual Studio 2010, когда я изменил свою сборку в диалоговом окне Configuration Manager с «x86» на «Любой ЦП».Этот драйвер базы данных OLEDB, который я понимаю, работает только в x86 и не является 64-битной совместимой.Изменение конфигурации сборки на x86 решило проблему для меня.

23 голосов
/ 09 сентября 2015

Я установил драйверы MS, и он все еще не работал для меня. Затем я нашел это сообщение в блоге , которое решило проблему. Прочтите его там, иначе используйте эти два изображения (ссылки из этого поста) в качестве суммарного значения TLDR:

enter image description here

enter image description here

15 голосов
/ 13 апреля 2013

Если вы используете 64-разрядную версию, но проблема по-прежнему возникает даже после установки AccessDatabaseEngine, см. в этом сообщении , проблема для меня решена.

т.е. вам необходимо установить это AccessDatabaseEngine

14 голосов
/ 30 января 2014

Для всех тех, кто еще затронут этим.

Я получаю сообщение об ошибке ...

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 установлена, и использовать соответствующий номер версии.

7 голосов
/ 19 февраля 2016

Вам необходимо изменить платформу решений с «Любой ЦП» на «x86» или «x64» в зависимости от разрядности установки в офисе.

Ниже приведены шаги:

  1. Щелкните правой кнопкой мыши файл решения в обозревателе решений: enter image description here

  2. Нажмите на диспетчере конфигурации.
  3. Нажмите раскрывающийся список активной платформы, если x86 уже существует, выберите его, иначе нажмите Новый.enter image description here

  4. Выберите x86 или x64 из раскрывающегося списка новой платформы: enter image description here

Скомпилируйте и запустите ваше приложение.

4 голосов
/ 30 ноября 2015

Мне удалось это исправить, выполнив шаги, описанные в этой статье: 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, перейдя в Инструменты »Параметры» Проекты и решения »Веб-проекты» Общие и выбрав

«Использовать 64-разрядную версию IIS Express для веб-сайтов и проектов»

После проверки этой опции, затем установив целевую платформу моего проекта обратно на «Любой процессор» (я установил его на x86 где-то в процессе устранения неполадок), я смог преодолеть ошибку.

...