2013-03-21 4 views
1

Короткий и сладкий:«Microsoft.ACE.OLEDB.12.0» поставщик не зарегистрирован бут это

  • приложение работает на x86 машине, но не на x64 (примерил 2008 Server и Windows 8)
  • Microsoft Access Database Engine 2010 уже установлен (также установлен Microsoft Office 2007 Access Database Engine)
  • 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); 

Любые идеи, что я должен сделать, чтобы получить это приложение для работы на 64-разрядных машинах? Благодаря!

+0

Вы установили 32-разрядный 2007 и 64-разрядный 2010? Потому что это то, что вам нужно. – Fionnuala

+0

Интересно. Я понял, что я не устанавливаю целевую платформу на x86, поэтому, как только я это сделал, ошибка исчезла. Но я буду помнить ваш ответ. – Mossi

ответ

3

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

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

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

  2. Ваш C# проект настроен таргетинг Только для 32-разрядных платформ (x86) и 64-разрядной машины установлена ​​только 64-разрядная версия компонента Database Database Engine. Ссылка не удается, потому что программа работает как 32-бит, но машина отсутствует

    C: \ Program Files (x86) \ Common Files \ Microsoft Shared \ Office14 \ ACEOLEDB.DLL

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

+0

Спасибо. Задача решена! – Mossi

0

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

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

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

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

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

Смежные вопросы