Провайдер не зарегистрирован на локальном компьютере
Обновлено: 22.11.2024
Во-первых, я обойдусь наиболее очевидной причиной ошибки, а именно тем, что провайдер не был зарегистрирован на машине, на которой запущено приложение. Поставщик ACE не устанавливается в операционных системах Windows по умолчанию. Вы должны установить его. Поставщик ACE доступен в трех формах: ядро базы данных Microsoft Office Access 2007, распространяемый компонент Microsoft Access Database Engine 2010 и распространяемый компонент 2016. Версия 2007 года доступна только как 32-разрядный компонент, тогда как версии 2010 и 2016 годов предлагают как 32-, так и 64-разрядные варианты. Вы должны быть осторожны при выборе варианта, потому что неправильный выбор здесь является наиболее частой причиной появления сообщения об ошибке.
В этом случае у вас есть два варианта. Во-первых, вы можете установить 2010 или 2-16 64-битную версию. Если у вас установлена 32-битная версия 2007 года, вы можете просто установить 64-битную версию вместе с ней. Если у вас установлена 32-разрядная версия 2010 или 2016 года, вам необходимо удалить ее, а вместо этого загрузить и установить 64-разрядную версию. Вы не можете одновременно установить 32- и 64-разрядные версии одного и того же провайдера. Если вы выполняете установку на своем компьютере для разработки, вы также можете быть ограничены разрядностью любых существующих установок Office.
Нажмите «Пулы приложений» на левой панели, затем выберите пул приложений для соответствующего сайта на центральной панели и нажмите «Дополнительные настройки» справа:
Найдите запись Включить 32-разрядные приложения и измените False на True:
IIS Express
Если вместо этого вы запускаете IIS Express из командной строки, перейдите в нужную папку. 32-разрядная версия по умолчанию устанавливается в C:\Program Files (x86)\IIS Express. 64-разрядная версия устанавливается в C:\Program Files\IIS Express. Вы можете определить, какая версия IIS Express запущена на вкладке «Процессы» в диспетчере задач:
32-разрядная версия обозначается *32 как часть имени образа.
Другие приложения
Visual Studio доступна только в виде 32-разрядного приложения. Если вы пытаетесь подключиться к Access из Visual Studio, у вас должна быть установлена 32-разрядная версия ACE. То же самое относится и к инструментам данных SQL Server, которые вы можете использовать для создания пакетов служб SSIS. Для других приложений следует проверить разрядность, чтобы убедиться, что у вас установлена соответствующая версия провайдера. Как я уже упоминал, вполне возможно одновременно установить как 32-разрядную, так и 64-разрядную версии, если только они не взяты с сайта загрузки 2010 года.
Альтернативы
Возможно, у вас нет доступа к серверу IIS для установки версии ACE или внесения изменений в 32-разрядные приложения. Вместо этого вы можете использовать провайдер JET, который по-прежнему является частью операционной системы Windows. Это полезно только в том случае, если вы можете включить 32-разрядные приложения (или включить их), но не можете ничего установить на сервер. Вместо этого вам потребуется пересохранить файлы accdb в файлы mdb (база данных Access 2002-2003). Это нормально, если вы не использовали какие-либо функции, которые были добавлены в Access в 2007 году, такие как BLOB и многозначные поля. Файлы Excel можно просто пересохранить как рабочую книгу Excel 97-2003 (.xls). Кроме того, вы можете использовать библиотеку EPPlus для работы с файлами Excel в формате .xlsx. Это бесплатное приложение с открытым исходным кодом, которое можно развернуть вместе с вашим приложением, избавляя от необходимости что-либо устанавливать.
Я пытаюсь получить данные из файла Excel о событии нажатия кнопки. Моя строка подключения:
Когда я нажимаю на кнопку, я получаю следующую ошибку:
Поставщик Microsoft.ACE.OLEDB.12.0 не зарегистрирован на локальном компьютере.
Понятия не имею, как это исправить. Моя операционная система — Windows 7.
Небольшой комментарий: использование OLEDB для чтения файла Excel — устаревшая технология, очень медленная и, как вы уже выяснили, требует ручной установки дополнительных пакетов на целевом компьютере. (Конечно, вопрос был задан в 2011 году.) Вместо этого используйте ClosedXml (доступен в NuGet), который работает прямо из коробки.
Если вы импортируете в Sql Server, вы можете запустить этот запрос из ssms: выполнить master.dbo.xp_enum_oledb_providers Он сообщит вам, какие провайдеры, по его мнению, у вас есть. Раньше у меня были и Microsoft.ACE.OLEDB.16.0, и Microsoft.ACE.OLEDB.12.0, но когда я пытался импортировать данные, я получил то же самое «не зарегистрирован на вашем локальном компьютере», что и OP, для обоих Excel 16 и форматы файлов Excel 2007 (oledb.16.0 и oledb.12.0 соответственно). На этом этапе имеет смысл сократить свои потери и отказаться от программного обеспечения Microsoft.
@user1040323, выполните master.dbo.xp_enum_oledb_providers, чтобы узнать, что находится на сервере, а не на вашем локальном компьютере.
Вот тот, который должен работать; - Это: На самом деле не задокументировано, но я нашел способ установить как 32-битную, так и 64-битную версии. Просто добавьте аргумент командной строки "/passive" к команде: "C:\путь к каталогу\AccessDatabaseEngine_x64.exe" /passive
38 ответов 38
Ну, вам нужно установить его. Вы ищете:
Моя ситуация: все работало нормально, а потом вдруг появилась эта ошибка. ТАК что могло случиться, чтобы вызвать это? Код не изменен.
Джек-потрошитель относится к решению, представленному в самом ответе, а не к комментариям. Установка драйвера системы Office 2007: компоненты подключения к данным сразу же решила проблему.
При использовании VS 2012 также убедитесь, что флажок "Предпочитать 32-разрядную версию" не установлен в свойствах проекта >> Сборка >> Общая конфигурация.
Я использую VS 2008 (не спрашивайте), и это решение не работало, пока я не прочитал подсказку post_erasmus и не установил для параметра «Целевая платформа» значение x64 в «Свойства» >> «Сборка» >> «Общая конфигурация моего приложения». Спасибо!
Ссылка в этом ответе также позволяет загрузить и установить 32-разрядную версию. Несмотря на то, что у меня 64-разрядная версия Windows 7, IIS Express в Visual Studio 2013 по умолчанию работает в 32-разрядном режиме, и у меня уже были установлены 32-разрядные компоненты Office 2013, поэтому 32-разрядная установка — это то, что мне было нужно.< /p>
Это помогло решить мою проблему. Мое приложение VS 2019 скомпилировано с использованием любого процессора, что приводит к библиотеке x64. У меня была установлена 32-разрядная версия Office 2013, из-за чего я не мог установить механизм x64 Access DB. После установки версии Office x64 я смог установить движок x64, и теперь все работает. Ад DLL продолжает жить.
в зависимости от приложения (32/64 бит), использующего соединение, которое вы можете просто установить
- все офисы 2007–2016 годов содержат провайдер "Microsoft.ACE.Oledb.12.0"
- в зависимости от архитектуры вашего приложения выберите соответствующий механизм выполнения (32/64)6
проверьте своих провайдеров с помощью команды powershell как из 32-битной, так и из 64-битной оболочки:
и вы увидите, какого провайдера может использовать ваша система
например. в 64-битной системе с установленными 32-битными драйверами
даже в грядущем Office 2016
вы найдете строки
Microsoft.ACE.Oledb.12.0
в состав Office 2013 также входит csi.dll
который содержит "Microsoft.ACE.OLEDB.15.0"
и Office 2016
с версией "Microsoft.ACE.OLEDB.16.0"
Я получил эту ошибку в VS2015, используя Nuget LinqToExcel. Оказывается, поскольку у меня был установлен x64 ACE, мне пришлось явно собирать для x64 (Диспетчер конфигурации), а не для любого ЦП.
Powershell показал, что "Microsoft.ACE.Oledb.12.0" уже установлен. Однако установка пакета Access 2007 (также известного как 2007 Office System Driver: Data Connectivity Components) помогла мне приступить к работе. Уже в моей системе: Office 2016 Ent, Visual Studio 2017 Ent
немного не по теме, но этот простой powershell предназначен для ваших драйверов ODBC: Get-OdbcDriver | выберите Имя, Платформа
Это решило проблему для меня на 64-разрядном сервере, загрузив 32-разрядную среду выполнения Access 2016. В основном начните с 32-разрядной версии, чтобы быть в безопасности (плохие вещи случаются, когда вы пытаетесь переключиться на 64-разрядную версию в проекте).
Первое, что вам нужно проверить, это конфигурация сборки вашего приложения.
Если вы собрали свой проект под платформу x86, то для решения вашей проблемы вам необходимо установить на свой компьютер следующие пакеты:
После завершения установки попробуйте запустить приложение, если это отлично решит проблему, если нет, перейдите к шагу 2.
После завершения установки попробуйте запустить приложение, это должно решить проблему.
Если вы пытаетесь запустить приложение, созданное для платформы x64 или AnyCPU, я бы рекомендовал сначала убедиться, что оно работает должным образом на платформе x86. Если он не работает на этой платформе x86, выполните действия, описанные в первой части, и убедитесь, что он работает должным образом.
Я читал, что драйверы MS Access, включая драйвер базы данных OLEDB, работают только на платформе x86 и несовместимы с платформой x64 или AnyCPU. Но это представляется неверным. Я проверил, что мое приложение работает при сборке x86, а затем установил Access Database Engine, используя пассивный флаг.
После этих двух шагов мне удалось запустить приложение после сборки в конфигурации сборки x64 или AnyCPU. Похоже, это решило мою проблему.
Примечание: кажется, что порядок шагов имеет значение, поэтому следуйте ему.
У меня была проблема: я переключался с 32-битного приложения на 64-битное, и оно больше не запускалось. Вторая часть вашей инструкции работает отлично! Флаг /passive разрешает установку даже с 32-разрядной версией Microsoft Office.
Совет. Извлеките файл AccessDatabaseEngine_x64.exe в папку, чтобы получить файлы AceRedist.msi и Data.cab. Откройте приглашение cmd в режиме администратора и выполните AceRedist.msi /passive .
Большое спасибо. Первый вариант у меня сработал. Я помню, сколько хлопот я столкнулся с удалением 32-битного Office, и только после установки 64-битного офиса эта проблема была решена раньше. Но вместо этого волшебство сотворил этот 64-битный офисный компонент.
Мы столкнулись с этой проблемой в старом приложении, которое мы поддерживаем. Это оказалось правильным ответом, но поставило нас в тупик, потому что мы устанавливали 64-битную версию, поскольку мы используем 64-битные ноутбуки. Но переход на 32-разрядную версию этого исправил (AccessDatabaseEngine.exe).. НЕ AccessDatabaseEngine_64.exe, несмотря на то, что приложение создано для 32-разрядной версии, а наша ОС работает на 64-разрядной версии.
Я получил эту ошибку/исключение в Visual Studio 2010, когда изменил свою сборку в диалоговом окне Configuration Manager с "x86" на "Any CPU". Насколько я понимаю, этот драйвер базы данных OLEDB работает только в x86 и не совместим с 64-битной версией. Изменение конфигурации сборки обратно на x86 решило проблему для меня.
При отладке приложения в Visual Studio действительно помогает выбрать x86 вместо любого CPU/x64 в диспетчере конфигурации.
Я установил драйверы MS, но они все равно не работают. Затем я нашел этот пост в блоге, который решил проблему. Прочтите его там, иначе используйте эти два изображения (ссылки из этого поста) в качестве резюме TLDR:
Собирался опубликовать это как свой вклад. Это была моя проблема. Я бы изменил этот параметр IIS вчера, так как один проект в моем решении был скомпилирован x86, поэтому я предполагаю, что он классифицирует всю программу как 32-разрядную.
Мой сервер работает под управлением 64-разрядной версии, но установленные компоненты MS Office имеют 32-разрядную версию. Это решило мою проблему. Спасибо.
Какая невероятно сложная вещь для работы :(, интересно, вы могли бы написать это в powershell и просто интегрировать в какой-то скрипт автоматической настройки сервера?
@ShaulBehr Надеюсь, это поможет другим понять. Конкретная команда, которую я использовал, была (в окне с повышенными правами powershell/cmd): «C:\Windows\System32\inetsrv\./appcmd set apppool /apppool.name:YOURAPPPOOLNAMEHERE/ enable32BitAppOnWin64: true"
Несмотря на то, что было дано много ответов, проблема, с которой я столкнулся, еще не упоминалась.
-
Мой сценарий: 64-разрядное приложение, Win10-64, установлен 32-разрядный пакет Office 2007.
Установка 32-разрядного установщика AccessDatabaseEngine.exe, загруженного из MS, сообщает об успехе, но НЕ установлена, что подтверждается с помощью сценария Powershell в одном из сообщений выше здесь.
Установка 64-разрядного установщика AccessDatabaseEngine_X64.exe сообщила о шокирующем сообщении об ошибке:
Очень простое решение было найдено здесь, на сайте Autodesk. Просто добавьте параметр /passive в строку командной строки, например:
Установка прошла успешно, драйвер OleDb заработал.
Файлы Excel, которые я обрабатываю с помощью OleDb, имеют тип xlsx, созданы с помощью EPPlus 4.5 и изменены с помощью Excel 2007.
Я мог бы установить AccessDatabaseEngine_X64.exe обычными способами, но использовал пассивный параметр для установки 32-битного эквивалента (AccessDataBaseEngine.exe). Затем я, наконец, смог подключиться к базе данных Access из Visual Studio 2019.
Это также работает для пакетов SSIS, импортирующих Excel в VS 2019. Как и @VolkanOzcan, я также без проблем установил X64, но мне пришлось передать пассивный параметр в AccessDatabaseEngine.exe (должна быть 32-разрядная версия). Я подозреваю, что тот, который вы устанавливаете вторым, вероятно, потребует этого параметра.
Для всех, кого это еще коснулось.
Я получаю сообщение об ошибке.
<р>. как описано в OP, Шайлеше Саху.У меня 64-битная Windows 7.
Но радости все равно нет.
<р>. который дал мне этот результат (для краткости я удалил другие источники данных).Как видите, у меня Microsoft.ACE.OLEDB.15.0 (пятнадцать), а не Microsoft.ACE.OLEDB.12.0 (двенадцать)
Итак, я изменил строку подключения на 15, и это сработало.
Итак, краткий фрагмент кода PowerShell, демонстрирующий программный код версии.
исправлено, чтобы выбрать последнюю версию ACE, если их несколько
Надеюсь, любой, кто обнаружит это, теперь сможет проверить, какая версия OLEDB установлена, и использовать соответствующий номер версии.
Здравствуйте, я пытаюсь читать листы Excel с помощью PowerShell. Файлы Excel хранятся в библиотеке документов SharePoint, и на сервере нет установки Excel. У меня виндовс сервер 2008 R2. Я установил драйвер системы Office: компоненты подключения к данным, однако, когда я запускаю ваш запрос, я не вижу Microsoft.ACE.OLEDB. У вас есть представление об этом? и любое предложение? Заранее спасибо.
Я нашел ответ. Я попросил нашего системного администратора установить MS Access Database Engine. У него была установлена версия x86. Когда я снова запускаю запрос в PowerShell x86, я вижу ACE.OLEDB.
Отличный код PowerShell. У меня была 32-битная версия (которой не было в списке PowerShell), что не позволяло мне установить 64-битную версию. Как только я удалил 32-разрядную версию, я смог установить 64-разрядную версию без сообщения «у вас уже есть 32-разрядные компоненты Office». 64-разрядная версия появилась в списке PowerShell, и мое приложение заработало.
Если вы используете 64-разрядную версию, но у вас по-прежнему возникают проблемы даже после установки AccessDatabaseEngine, см. этот пост, он решил проблему для меня.
Вам необходимо изменить Платформу решения с "Любой ЦП" на "x86" или "x64" в зависимости от разрядности офисной установки.
Шаги приведены ниже:
Щелкните правой кнопкой мыши файл решения в обозревателе решений:
Нажмите раскрывающийся список Active Platform, если x86 уже существует, выберите его, в противном случае нажмите New.
Выберите x86 или x64 в раскрывающемся списке новой платформы:
Скомпилируйте и запустите приложение.
Ключевым моментом для меня было следующее:
При отладке с помощью IIS
"Используйте 64-разрядную версию IIS Express для веб-сайтов и проектов"
После проверки этого параметра, а затем установки целевой платформы моего проекта обратно на «Любой процессор» (где-то в процессе устранения неполадок я установил для нее значение x86), мне удалось устранить ошибку.
Спасибо, большинство других ответов касаются перехода на 32-разрядную версию, но это поможет вам перейти на 64-разрядную версию.
Если вы отлаживаете веб-проект, просто убедитесь, что IIS Express работает в 32- или 64-разрядной версии, в зависимости от настроек вашего проекта.
Инструменты > Параметры > Проекты и решения > Веб-проекты
и оттуда установите (или снимите) флажок «Использовать 64-разрядную версию IIS Express». '
Если установленный "AccessDatabaseEngine" по-прежнему не помогает, ниже приведено решение:
Вам необходимо изменить Active Solution Platform с «Любой процессор» на «x86».
выполните 2 шага:
- в этом меню: проект -> свойства вашего проекта. -> Сборка: снимите флажок "предпочитать 32-разрядную версию"
- в connectionString: напишите кавычки до и после расширенных свойств, например: Расширенные свойства='Excel 12.0 Xml;HDR=YES'
Похоже, снятие флажка «Предпочитать 32-разрядную версию» помогло мне, если у меня был установлен распространяемый компонент Microsoft Access Database Engine 2010.
Сначала проверьте, какая версия microsoft.ace.oledb.12.0 установлена в вашей системе.
Проверьте указанный ниже путь C:\Program Files\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL -- установлена 64-разрядная версия
Проверьте указанный ниже путь C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL -- бит x86 установлен
Если установлен (x86), с помощью диспетчера конфигурации измените платформу решения на x86, для x64 измените на x64.
Если недоступно, установите его по ссылке ниже
Решение для меня, как вы предложили, для ошибки «Поставщик Microsoft.ACE.OLEDB.12.0 не зарегистрирован на локальном компьютере» состоит в том, чтобы изменить платформу Active Solution Platform с «Любой процессор» на «x86». р>
Когда я выполнил эти шаги, пересобрал решение, загрузил EXE-файл и поместил его в сеть, на 64-разрядной машине с Windows 7 все заработало гладко.
Я столкнулся с такой же проблемой. Перейдите в «Свойства решения» и измените «Любой процессор» на x86, я думаю, это сработает.
Читайте также: