Поставщик Microsoft.ACE.OLEDB.12.0 не зарегистрирован на локальной машине

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

Ответ 2

Доступна 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.

Ответ 3

в зависимости от приложения (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"

Ответ 4

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

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

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

      После завершения установки попробуйте запустить приложение, если это решает проблему, если нет, переходите к шагу 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, тогда я установлен модуль базы данных доступа с использованием пассивного флага.

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

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

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

Ответ 5

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

Ответ 6

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

введите описание изображения здесь

введите описание изображения здесь

Ответ 7

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

то есть. Вам нужно установить этот AccessDatabaseEngine

Ответ 8

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

Я получаю ошибку...

OLEDB error "The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine."

... как описано OP, Шайлеш Саху.

У меня 64-битная Windows 7.

Моя проблема заключается в сценариях PowerShell, но использует строку подключения, похожую на сообщение OP, поэтому, надеюсь, мои результаты могут быть применены к С#, 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 установлена ​​и использовать соответствующий номер версии.

Ответ 9

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

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

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

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

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

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

Ответ 10

Хотя было дано много ответов, проблема, с которой я столкнулся, еще не упоминалась.

  • Мой сценарий: 64-разрядное приложение, Win10-64, 32-разрядная версия Office 2007 установлена.
  • Установка 32-разрядного установщика AccessDatabaseEngine.exe, загруженного с MS сообщает об успехе, но НЕ устанавливается, что подтверждается с помощью Powershell Сценарий одного из постов выше здесь.

  • Установка 64-разрядного установщика AccessDatabaseEngine_X64.exe сообщила о шокирующем сообщении об ошибке:

enter image description here

Очень простое решение было найдено здесь на сайте Autodesk. Просто добавьте параметр /passive в строку командной строки, например:

AccessDatabaseEngine_X64.exe/passive

Установка прошла успешно, драйвер OleDb сработал.

Файлы Excel, которые я обрабатываю с помощью OleDb, относятся к типу xlsx, созданы в EPPlus 4.5 и изменены в Excel 2007.

Ответ 12

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

Ответ 13

Если вы отлаживаете веб-проект, убедитесь, что IIS Express работает либо на 32, либо на 64 бита в зависимости от настроек вашего проекта.

Перейти к

Инструменты > Параметры > Проекты и решения > Веб-проекты

и оттуда отметьте (или снимите флажок) "Использовать 64-битную версию IIS Express..."

Ответ 14

Сначала проверьте, какая версия microsoft.ace.oledb.12.0 установлена ​​в вашей системе.

Проверьте ниже путь C:\Program Files\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL -64 бит установлен

Проверьте ниже путь C:\Program Files (x86)\Общие файлы \Microsoft Shared\OFFICE14\ACEOLEDB.DLL - бит xx установлен

Если (x86) установлен, то с помощью платформы решения для изменения конфигурации для x86, для x64 измените на x64.

Если это невозможно, установите с помощью ссылки ниже

https://www.microsoft.com/en-us/download/details.aspx?id=23734

Ответ 15

syp_dino,

Решение для меня, как вы предложили для поставщика "Microsoft.ACE.OLEDB.12.0", не зарегистрировано на локальном компьютере. ошибка заключается в том, чтобы изменить активную платформу решения с любого "процессора", на "x86".

Когда я выполнил эти шаги, перестроил решение, захватил EXE и разместил его в сети, все работало гладко на 64-битной машине Windows 7.

Ответ 17

У меня такая же проблема, когда мы читаем файл Excel.

История проблемы:

Недавно мы перенесли наше приложение с 32-разрядной до 64-разрядной из-за потребности в памяти. Для этого мы перенесли наши окна 7 с 32-битного на 64-битный. Но мы все же установили 32-разрядный офис на наших машинах.

потому что у нас возникла эта проблема при импорте данных Excel в приложение.

Решение

Я загрузил 64-битную версию http://www.microsoft.com/en-us/download/details.aspx?id=13255 и установил с аргументом как,

AccessDatabaseEngine_x64.exe/passive

Без изменения кода моя проблема будет решена.

Примечание:

В 64-битной операционной системе и 64-битном офисе мои функции отлично работали без этого исправления. Это исправление требуется только в том случае, когда наше приложение работает в 64-разрядной версии на 64-разрядной ОС, на котором установлено 32-разрядное офисное устройство.

Ответ 18

Просто загрузите и установите следующий механизм доступа к базе данных (X86 или X64: в соответствии с конфигурацией вашего компьютера) и см. волшебство:)

https://www.microsoft.com/en-us/download/confirmation.aspx?id=13255

Ответ 19

Я столкнулся с этой же проблемой. Перейдите в Свойства решения и измените любой процессор на x86, я думаю, что он выполнит эту работу.

Ответ 20

выполните это 2 шага: 1. в этом меню: проект → свойства вашего проекта... → Build: снимите флажок "предпочесть 32-битный" 2. в connectionString: пишите комментарии до и после расширенных свойств, например: Extended Properties = ' Excel 12.0 Xml; HDR = ДА '

                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 adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString);
            var ds = new DataSet();

            adapter.Fill(ds, TableNmae);

            DataTable data = ds.Tables[TableNmae];
            dg1.DataSource = data;

Ответ 21

Я следовал инструкциям других; установив этот патч, установив этот патч, а также Microsoft Access Database Engine 2010.

Моя проблема заключалась в том, что я использую одну и ту же библиотеку (linq2sql) на двух сайтах на моей машине; 1 работает, а 1 - нет.

В конце концов я обнаружил, что мне пришлось "включить 32-разрядные приложения" в расширенных настройках приложения для моего нерабочего сайта.

Теперь все работает отлично.

Ответ 22

также можно попробовать выполнить следующие действия.

В SQL Server, 1. Откройте одну базу данных 2. Выберите в опции "Server Obtect" 3.Clic в 'Linked Servers' 4.Clic в "Провайдерах" 5.Clic Rigth в 'Microsoft.ACE.OLEDB.12.0' 6.Установите все параметры и закройте

Ответ 23

1.) Проверьте строку подключения ConnectionStrings.com.

2.) Убедитесь, что установлен правильный механизм базы данных. Это были две базы данных, которые помогли мне.

Распространяемый Microsoft Access Database Engine 2010

2007 Драйвер системы Office: Компоненты подключения данных

3.) Может возникнуть проблема с вашей целевой платформой сборки: "Любой процессор", возможно, она должна быть "X86" ( "Свойства", "Сборка", "Платформа" ).

Ответ 24

Не забудьте установить AccessDatabaseEngine на сервер для веб-приложения.

Ответ 25

У меня была такая же проблема, но в этом случае microsoft-ace-oledb-12-0-provider уже был установлен на моем компьютере и отлично работал для разработки другого приложения.

Разница между этими приложениями и тем, с которыми я столкнулся с проблемой, заключалась в том, что старые приложения выполнялись на " Local IIS", тогда как ошибка с ошибкой была " IIS Express (работает из Visual Studio). Так что я сделал -

  • Щелкните правой кнопкой мыши на имени проекта.
  • Перейдите в раздел Свойства
  • Перейдите в веб-вкладку справа.
  • Под серверами выберите Local IIS и нажмите кнопку "Создать виртуальный каталог".
  • Запустите приложение еще раз, и он сработал.

Ответ 26

У меня уже была установлена ​​ Microsoft Access Database Engine 2010 Redistributable, уже установленная на моем компьютере, но по-прежнему была получена ошибка Microsoft ACE OLEDB Provider.

Затем я вспомнил, что недавно обновился до Office 2016, поэтому я могу попробовать переустановить Microsoft Access Database Engine 2010 Redistributable. И это устранило проблему на моей машине.

Итак, если вы обновили до другой версии MS Office или даже отремонтировали/переустановили свой MS Office, попробуйте переустановить Microsoft Access Database Engine 2010 Redistributable, прежде чем тратить время на поиск других исправлений. Удачи!

Ответ 27

Если вы получаете эту ошибку при попытке использовать ACE из приложения ASP.NET, наиболее вероятной причиной является то, что вы установили либо одну из 32-разрядных версий. По умолчанию IIS в 64-разрядной операционной системе будет запускать приложения в 64-разрядном рабочем процессе. 64-разрядные процессы не могут загружать 32-разрядные библиотеки DLL. Когда вызов выполняется провайдером ACE, 64-битный процесс попытается найти 64-битную DLL. Если он не существует, вы получите сообщение об ошибке, которое привело вас сюда.

В этом случае у вас есть два варианта. Во-первых, вы можете установить 64-разрядную версию 2010 года. Если у вас установлена ​​32-разрядная версия 2007 года, вы можете просто установить 64-разрядную версию 2010 вместе с ней. Если у вас установлена ​​32-разрядная версия 2010 года, вам необходимо ее удалить и загрузить и установить 64-разрядную версию 2010. Вы не можете одновременно устанавливать 32- и 64-разрядные версии поставщика 2010 года. Если вы выполняете установку на вашей машине разработки, вы также можете быть ограничены битрейтом любых существующих установок Office.

Второй вариант - изменить пул приложений в IIS для включения 32-разрядных приложений. Если вы используете полную версию IIS, для этого вы можете использовать инструмент управления (Панель управления "Администрирование" Диспетчер служб IIS).

Подробнее см. ниже ссылка

Ответ 28

Это сработало для меня прямо сейчас.

  1. Посетите эту страницу, затем загрузите соответствующий пакет для своего компьютера (AccessDatabaseEngine.exe или AccessDatabaseEngine_X64.exe)
  2. Установите это.
  3. Наслаждайтесь... Ваши коды теперь работают...

Но для вашего пакета приложений вы можете использовать любые следующие решения:

  1. Перейдите в раздел "C:\Program Files (x86)\Common Files\microsoft shared" или "C:\Program Files\Common Files\Microsoft Shared" и поместите каталог "OFFICE14" в том же месте вашего файла пакета.

Или

  1. Прикрепите два проекта (в пункте 1) в установочном пакете.

Ответ 29

Это зависит от того, где вы установили офис, если у вас есть x64-разрядный офис, тогда вы должны скомпилировать приложение как x64, чтобы он мог запускаться, поэтому, если вы хотите, чтобы он запускался на x36, вы должны установить офис x86 для принятия, я пробовал все решения выше, но никто не работал до тех пор, пока я не понял, что у меня был офис x64bit, и поэтому я построил приложение как x64 и работал

Ответ 30

  • Я столкнулся с той же проблемой в течение нескольких дней. Я установил OLEDB драйверы для 64-битных, попробовали 32-разрядные, которые доступны на веб-сайт Microsoft.
  • Я попытался переустановить 64-разрядную версию Office так или иначе это не сработало. Пробовал разрешить 32-битное приложение в пуле IIS правда.
  • Tried Изменение среды проекта на X86, AnyMachine, Mixed. И почти попробовал весь патч, который я мог найти в Интернете. Но все решение разочаровало меня.
  • Хотя я наконец узнал, что поставщик, который мы скачивали, был последним и не работал вместе с ним.
  • Я удалил его и установил драйверы oledb 14.0.7015.1000. У меня нет ссылки для него, так как я получил ее из ресурсов компании, вам может понадобиться Google, но она работает. Я пришел на этот DOWNLOAD LINK, и он тоже работал... однако это версия 14.0. 6119.5000, но он сработал.