Поставщик Microsoft.ACE.OLEDB.12.0 не зарегистрирован, но он

Коротко и мило:

  • приложение работает на машине x86, но не на x64 (пробовалось на сервере 2008 года и Windows 8)
  • Ядро СУБД Microsoft Access 2010 уже установлено (также установлено ядро ​​СУБД Microsoft Office 2007 Access)
  • MS Office не установлен
  • подтвердил существование C: \ Program Files (x86) \ Common Files \ microsoft shared \ OFFICE12 \ ACEOLEDB.DLL

Код:

string conn = "Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;";
OleDbConnection _connOle = new OleDbConnection(conn);

Есть идеи, что мне делать, чтобы это приложение работало на машинах x64? Спасибо!


person Mossi    schedule 21.03.2013    source источник
comment
Вы установили 32-битную версию 2007 и 64-битную 2010? Потому что это то, что вам нужно.   -  person Fionnuala    schedule 21.03.2013
comment
Интересный. Я понял, что не настраивал целевую платформу на x86, поэтому, как только я сделал это правильно, ошибка исчезла. Но я запомню ваш ответ.   -  person Mossi    schedule 21.03.2013


Ответы (2)


Я могу придумать два сценария, которые могли бы объяснить вашу проблему:

  1. Ваш проект C # настроен для работы как с 64-разрядной, так и с 32-разрядной платформами, а на 64-разрядном компьютере установлена ​​только 32-разрядная версия ядра СУБД Access. Ссылка не выполняется, потому что программа работает как 64-разрядная, но машина отсутствует.

    C: \ Program Files \ Common Files \ Microsoft Shared \ OFFICE14 \ ACEOLEDB.DLL

  2. Ваш проект C # настроен только на 32-разрядные платформы (x86), а на 64-разрядном компьютере установлена ​​только 64-разрядная версия ядра СУБД Access. Ссылка не выполняется, потому что программа работает как 32-разрядная, но машина отсутствует

    C: \ Program Files (x86) \ Common Files \ microsoft shared \ OFFICE14 \ ACEOLEDB.DLL

Обратите внимание, что установщик 64-разрядной версии ядра СУБД Access устанавливает только 64-разрядную версию, а не обе сразу.

person Gord Thompson    schedule 21.03.2013

Хотя на этот вопрос уже был дан ответ, вот что помогло мне решить эту проблему после многих часов.

Я использовал Process Monitor, чтобы узнать, какой ключ реестра ищется. Это было HKEY_CLASSES_ROOT\Microsoft.ACE.OLEBD.12.0.

В моем случае этот ключ отсутствовал, несмотря на то, что «Ядро базы данных Microsoft Access 2010» было указано в разделе «Программы и компоненты».

Кроме того, файл ACEOLEDB.DLL уже существовал в C:\Program Files\Common Files\Microsoft Shared\OFFICE14\.

Переустановка «Распространяемого компонента Microsoft Access Database Engine 2010» завершается без каких-либо ошибок, но журнал событий Windows указывает на проблему, и при просмотре файла журнала установки обнаруживается несоответствие версий («Другая версия этого продукта уже установлена» ).
Итак, я удалил «Ядро базы данных Microsoft Access 2010» из «Программы и компоненты», а затем переустановил его. Теперь он установлен нормально.
В результате был добавлен раздел реестра HKEY_CLASSES_ROOT\Microsoft.ACE.OLEBD.12.0, а моя копия ACEOLDBD.DLL была заменена более ранней версией (14.0.7011.1000 из 14.0.7159.5000).

person mearle    schedule 10.11.2017