Поставщик не зарегистрирован на локальном компьютере

Обновлено: 06.07.2024

Я пытаюсь получить данные из файла Excel по событию нажатия кнопки. Моя строка подключения:

Когда я нажимаю на кнопку, я получаю следующую ошибку:

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

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

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

проверьте своих провайдеров с помощью powershell-команды из 32- и 64-битной оболочки:

и вы увидите, какой провайдер может использовать ваша система

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

даже в предстоящем офисе 2016

вы найдете строки

Microsoft.ACE.Oledb.12.0

Office 2013 поставляется также с csi.dll

который содержит "Microsoft.ACE.OLEDB.15.0"

которая имеет версию "Microsoft.ACE.OLEDB.16.0"

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

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

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

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

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

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

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

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

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

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



    Мой сценарий: 64-разрядное приложение, Win10-64, 32-разрядная версия Office 2007 установлена.

Установка 32-разрядного установщика AccessDatabaseEngine.exe, загруженного из MS, сообщает об успехе, но НЕ устанавливается, что подтверждается сценарием Powershell, приведенным выше.


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

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

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

Для всех тех, кто еще пострадал от этого.

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

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

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

Но все равно нет радости.

. который дал мне этот результат (для краткости я удалил другие источники данных).

Как видите, у меня есть Microsoft.ACE.OLEDB. 15.0 (пятнадцать) не Microsoft.ACE.OLEDB. 12,0 (двенадцать)

Итак, я изменил строку подключения до 15, и это сработало.

Итак, быстрый фрагмент PowerShell, демонстрирующий, как программировать версию.

исправлено, чтобы выбрать последнюю версию ACE, если более одного

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

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

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

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


Щелкните правой кнопкой мыши файл решения в обозревателе решений:


Нажмите на активную платформу. Если x86 уже существует, выберите его, иначе нажмите New.


Выберите x86 или x64 из выпадающего списка новой платформы:

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

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

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

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

Ключевым моментом для меня было это:

При отладке с IIS,

по умолчанию Visual Studio использует 32-разрядную версию. Вы можете изменить это в Visual Studio, перейдя в Инструменты "Параметры" Проекты и решения "Веб-проекты" Общие и выбрав

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

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

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

Если установленный "AccessDatabaseEngine" по-прежнему не помогает, ниже приведено решение:

Вам нужно изменить Active Solution Platform с "Любой ЦП" на "x86".

Сначала проверьте, какая версия 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.

Если нет в наличии, установите по ссылке ниже

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

Эти конфигурации работали в январе 2020 года на моей новой сборке машины:

Я покажу несколько вариантов решения этой проблемы. Но в начале кратко о возникающей проблеме.

Я использовал следующий вариант подключения к базе nookery.accdb

var conn = new OleDbConnection ( @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\SQL\nookery.accdb" ) ;

Вам необходимо создать пустой проект и запустить следующий метод:

DataTable table = new OleDbEnumerator ( ) . GetElements ( ) ;

Далее вам необходимо вызвать данным метод и проанализировать информацию.

И изменить целевую платформу в сборке на x86, а потом на x64. Посмотрев в информации под какую сборку у вас будет доступен поставщик.

Покажу на примере первоначально у меня целевая сборка была под Any CPU метод показал следующую информацию :


Посмотрев на информацию мы не обнаруживаем в ней Microsoft.ACE.OLEDB.12.0. Меняем целевую сборку на x86


Как видим результат остался неизменным, переключаемся на x64


Как мы видим появился доступный нам поставщик Microsoft.ACE.OLEDB.12.0 Для этого всего лишь требовалось сменить целевую платформу.



Необходимо так же добавить или установить в диспетчере конфигурации как показано ниже x64

Если выбора x64 нет, в этом окне так же выберите пункт добавить и соответственно добавьте выбор x64.

Так же необходимо поменять в проекте на x64

Вторым решением будет скачать 2007 Office System Driver ссылка

11 комментариев

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

Пустой проект подразумевает создания main метода а соответственно точки входа. Вам достаточно добавить метод с сайта и вызвать его, можно просто скопировать, содержимое метода в метод main и запустить проект. Я вроде как доступно разъяснил на сайте, достаточно вызвать метод представленный на сайте, метод как то можно вызвать иначе без main?

Автору огромная благодарность! Полдня копал как подключить файл ACCDB к Вьюжал студии и наконец понял, где собака порылась 🙂
Провайдер Microsoft.ACE.OLEDB.12.0 доступен в 64битном варианте, а Студия она ж 32х-битная до сих пор. Хочется в дизайн-тайм получить доступ, для этого похоже придётся поставтиь 32хбитный офис. Пичалька. Но автору всё равно спасибо!

Пожалуйста. Рад был помочь!

Спасибо, помогло 🙂
Хотелось из ВижуалСтудии подцепиться к файлу базы данных. Однако, 64-битная винда в паре с 64-битным офиосом показывали фигу. Сделал как автор велел, глянул и поменял офис на 32-битный. Всё заработало! Автору респект.

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

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

проверьте своих поставщиков с помощью команды powershell из 32-разрядной и 64-битной оболочки :

и вы увидите, какой поставщик может использовать ваша система

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

даже в предстоящем офисе 2016 года

вы найдете строки

Microsoft.ACE.Oledb.12.0

Office 2013 также поставляется с csi.dll

который содержит " Microsoft.ACE.OLEDB.15.0 "

который имеет версию « Microsoft.ACE.OLEDB.16.0 »

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

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

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

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

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

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

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

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

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

Это не та версия, я думаю, что нужны другие исправления

@ArvoBowen Нет проблем. Я снова его открыл. Но оба вопроса имеют одинаковое решение. Как так? Это разные версии, требующие разных загрузок. Они связаны, но имеют разные решения. Если бы я последовал ответу на другой вопрос, это не решило бы мою проблему.

Примечание. Я использую 64-разрядную версию SQL 2016 Developer, 64-разрядную версию Office 2016.

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

Какой бы файл вы ни пытались получить / импортировать, убедитесь, что вы выбрали его как файл Office 2010 (даже если это может быть файл Office 2016).

У меня отлично сработало, спасибо! Загрузил мой офисный файл 2016 как офис 2007-2010, и он работал хорошо. Намного лучше, чем пробовать CSV / TSV. Спасибо, что упомянули, что мне не следует выбирать Office 2016. Не уверен, что я бы попробовал один из других. Я только что обновил ссылку на текущий URL-адрес для распространяемого На 64-битном WS 2016 мне пришлось использовать 32-битную версию, чтобы заставить его работать .

Для тех, кто все еще застрял в этой проблеме после попытки вышеуказанного. Если вы щелкнете правой кнопкой мыши по базе данных и перейдете к задачам-> импорт, то вот в чем проблема. Перейдите в меню «Пуск» и под sql server найдите мастер импорта и экспорта x64 bit и попробуйте это. Сработало для меня как шарм, но мне потребовалось слишком много времени, чтобы найти его Microsoft!

@otravers, я скачал и установил распространяемый компонент Access Database Engine 2016, но это не помогло. Потом меня осенило, что это для Access, а не для Excel. @Rod, несмотря на название, уверяю вас, это решает конкретную проблему с Excel и DTSWizard. У меня нет 64-разрядной версии мастера импорта / экспорта

В качестве быстрого обходного пути я просто сохранил книгу как файл Excel 97-2003 .xls. Мне удалось импортировать в этом формате без ошибок.

У меня не сработало. Получил: «Неожиданная ошибка от драйвера внешней базы данных (1). (Microsoft JET Database Engine)» Потребовалось несколько попыток, но в конце концов я нашел это самым быстрым решением моей проблемы. Это работает, только если у вас меньше 64 КБ строк для импорта. Следите за тем, чтобы в вашей электронной таблице не было более 65 536 строк, иначе вы можете потерять данные при этом преобразовании.

У меня есть альтернатива - просто преобразовать в CSV.

За большие проблемы, отличные решения, спасибо @PeterX Работал как шарм! Мне просто нужно было выбрать плоский файл вместо ms excel 2016, когда я загружал csv.

1: прямое открытие мастера импорта и экспорта sql server.

если вы можете подключиться с помощью мастера прямого импорта и экспорта sql-сервера, то проблема заключается в импорте из SSMS, это как активация 32-битной версии, если вы импортируете данные из SSMS.

Вместо установки AccessDatabaseEngine (64- разрядная версия) попробуйте использовать AccessDatabaseEngine (32-разрядная версия) , после установки Windows остановит вас для продолжения установки, если у вас уже установлено другое приложение, если это так, выполните следующие действия. Это от MICROSOFT . Тихая установка.

Если Office 365 уже установлен, параллельное обнаружение не позволит продолжить установку. Вместо этого выполните тихую установку этих компонентов из командной строки. Для этого загрузите нужный AccessDatabaseEngine.exe или AccessDatabaeEngine_x64.exe на свой компьютер, откройте административную командную строку, укажите путь установки и переключите Ex: C: \ Files \ AccessDatabaseEngine.exe / quiet

или проверьте содержимое дополнительной информации по ссылке ниже ,

Чтобы решить эту проблему, я изменил свойство сборки проекта на X86, чтобы он строился в 32-битном режиме и перестраивал проект на 32-битной машине. Но тот же проект использует другие драйверы БД (DB2, SQL и т. Д.) Для подключения к другим базам данных. Поэтому, когда я снова развернул свое приложение в 64-битной ОС, оно выдает исключение «Попытка загрузить 64-битную сборку на 32-битной платформе».

Я использую драйвер Microsoft.Jet.OLEDB.4.0 для чтения и записи в Excel (.xls)

У меня такая же проблема

Я применил ответ neo , но он не работал, пока я не изменил поставщика на «Provider = Microsoft.ACE.OLEDB.12.0;» в строке подключения.

Надеюсь, это поможет, если кто-то столкнется с той же проблемой.

Я знаю, что это довольно старые вопросы, и многие люди уже ответили на них. но я резюмирую вещи для понимания:

Если расширение файла - xls, а ОС - 32-битная, тогда можно использовать только " Microsoft.Jet.OLEDB.4.0 ". Microsoft не выпустила 64-битную версию этого драйвера.

Если расширение файла - xlsx или ОС - 64-битная, вам необходимо использовать " Microsoft.ACE.OLEDB.12.0 ". Приложение, скомпилированное в 32/64 битном режиме, не влияет на выбор драйвера.

Всегда устанавливайте 64-битный драйвер Microsoft.ACE.OLEDB.12.0 в 64-битной ОС. Если вы уже установили 32-битный Office, вам необходимо запустить драйвер из cmd с аргументом / passive. Этот взлом работает только до Office 2013, Microsoft прекратила этот обходной путь из Office 2016 для драйверов Microsoft.ACE.OLEDB.16.0.

Если приложение скомпилировано с флагом AnyCPU, оно будет искать 64-битные драйверы доступа в 64-битной ОС и 32-битные драйверы доступа в 32-битной ОС.

Если ваше приложение работает на localIIS, вы можете решить эту проблему, включив 32-разрядные приложения в дополнительных настройках AppPool.

enter image description here

1.-Откройте IIS
2.-Измените пул приложений на Расширенные настройки
3.-true для включения 32-разрядного приложения.

Ps. Я изменил Configuration Manager на X86 на платформе Active Solution

Я была такая же проблема. Я изменил конфигурацию приложения на x86 , и все заработало!

Я только что изменил свое свойство проекта на формат x64

Проект ---> Свойства ---> Сборка ---> Целевая платформа ---> X64

Мы столкнулись с этой проблемой в настольном приложении.

Это было решено путем изменения целевой платформы на X86 с любого процессора. Свойства проекта >> Сборка >> Целевая платформа.

enter image description here

Я сделал следующее, и проблема исчезла:

Сменил моего провайдера на Microsoft.ACE.OLEDB.12.0

Готово! Это устанавливает стартовые флаги для вашей программы, чтобы она запускалась в 32-битном режиме WOW64 и, следовательно, могла получить доступ к microsoft.jet.oledb.4.0.

Измените расширенные настройки пула приложений IIS Settings. Включить 32-битное приложение.

Просто измените свойство в зависимости от вашей машины, и все готово :-)

Проект ---> Свойства ---> Сборка ---> Целевая платформа ---> X64

Проект ---> Свойства ---> Сборка ---> Целевая платформа ---> X86

Я изменил строку подключения с

Var myConnectionString = string.Format ("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = ; Persist Security Info = True; Jet OLEDB: Database Password =;", gisdbPath);

Var myConnectionString = string.Format ("Provider = Microsoft.Jet.OLEDB.4.0; Mode = Share Deny None; Data Source = ; user password =;", gisdbPath);

Это работает, потому что я никогда не просил зарегистрировать Microsoft.Jet.OLEDB.4.0.

64-разрядной версии Jet действительно нет - и (по всей видимости) не планируется ее выпускать.

  • но я понятия не имею, как это будет работать, если вам нужно вернуться к Jet для ваших 32-битных приложений.

Однако вы можете переключить проект на 32-разрядную версию в экспресс-версии (я не пробовал и больше не установил 2008 в каком-либо варианте)

Может быть, пришло время полностью отказаться от баз данных Access, прикусить пулю и вместо этого перейти на SQL-сервер?

Я использую VS2013 для Winforms, у меня сработало приведенное ниже решение.

Затем установите VS Target Platform на x86.

В более старых версиях IIS вы не найдете Advance Settings , поэтому для включения Enable 32-bit Applications вам необходимо выполнить следующие команды:

cscript% SYSTEMDRIVE% \ inetpub \ adminscripts \ adsutil.vbs НАБОР W3SVC / AppPools / Enable32bitAppOnWin64 1

Я получал такое же исключение при запуске «SQL Server 2014 Import and Export Data (64-bit)» на моей Windows 8.1.

Чтобы решить эту проблему, я сделал следующее

запустил SQL Server 2014 Import and Export Data (32-bit) вместо 64-bit , и это работает для меня. Я не менял никаких настроек IIS и не устанавливал никакого дополнительного программного обеспечения.

Я знаю, что эта проблема возникает у меня снова и снова, когда я развертываю свое приложение на новом сервере, потому что я использую этот драйвер для подключения к файлу Excel. Вот что я делаю в последнее время.

Этот ниже отлично работает на моей машине разработчика, но на сервере выдает ошибку даже после установки последних драйверов ODBC, что, я думаю, является проблемой, но я решил ее так.

Я заменяю новым поставщиком, как показано ниже:

Но пока я это делаю, вы должны заметить одну вещь. При использовании расширения файла .xlsx и версии Excel 12.0.

Возможно, есть другой процесс, который тем временем открыл файл, и все, что мне нужно сделать, это перезапустить, и все начнется без сбоев, как и ожидалось.

Перейдите в Пуск-> Выполнить и введите cmd, это запустит командную строку (также доступна из Пуск-> Программы-> Стандартные-> Командная строка)

Введите cd .. и нажмите return type cd .. и снова нажмите return (продолжайте делать это, пока не появится подсказка:>)

Теперь вам нужно перейти в специальную папку, которая может быть c: \ windows \ system32, или это может быть c: \ winnt \ system32, или это может быть c: \ windows \ sysWOW64, попробуйте ввести каждый из них, например, cd c: \ windows \ sysWOW64 (если он говорит, что система не может найти указанный путь, попробуйте следующий) cd c: \ windows \ system32 cd c: \ winnt \ system32, если один из них не вызывает ошибки, остановитесь, вы нашли правильная папка.

Теперь вам нужно зарегистрировать библиотеки DLL OLE DB 4.0, набирая эти команды и нажимая клавишу возврата после каждого

Regsvr32 Msjetoledb40.dll regsvr32 Msjet40.dll regsvr32 Mswstr10.dll regsvr32 Msjter40.dll regsvr32 Msjint40.dll

Для Jet не существует 64-битного провайдера. Если вы хотите поддерживать несколько источников БД, включая Jet to Excel, вам понадобится хотя бы эта часть вашего приложения для работы в 32-битном процессе.

Ошибка, возникающая при компиляции для x86, немного странная. Я не понимаю, как в этом случае вы будете ссылаться на 64-битные сборки.

Читайте также: