Microsoft.Jet.OLEDB.4.0 'провайдер не зарегистрирован на локальном компьютере

191

Я создал приложение для Windows, разработанное в .NET 3.5, на 32-битном сервере Windows 2008. При развертывании приложения на 64-разрядном сервере отображается сообщение об ошибке «Поставщик Microsoft.Jet.OLEDB.4.0« не зарегистрирован на локальном компьютере ».

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

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

нео
источник

Ответы:

239

Я нашел решение этой проблемы. Проблема, которую я описал в своем вопросе, возникла в основном из-за несовместимости драйвера Microsoft.Jet.OLEDB.4.0 в 64-битной ОС.

Поэтому, если мы используем драйвер Microsoft.Jet.OLEDB.4.0 на 64-битном сервере, мы должны принудительно встроить наше приложение в 32-битном режиме (это ответ, который я нашел, когда выполнял расширенный поиск этой известной проблемы ) и это приводит к поломке другой части моего кода.

К счастью, теперь Microsoft выпустила 64-разрядный совместимый драйвер Office 2010, который можно использовать вместо традиционного драйвера Microsoft.Jet.OLEDB.4.0. Он работает как на 32-битных, так и на 64-битных серверах. Я использовал его для работы с файлами Excel, и он отлично работал в обеих средах.Но этот драйвер в бета-версии .

Вы можете загрузить этот драйвер из Microsoft Access Database Engine 2010, распространяемого бесплатно.

нео
источник
6
Также обратите особое внимание на инструкции по этой ссылке :)
Mark
4
Я была такая же проблема. Я изменил конфигурацию приложения на x86, потом все заработало!
skpaul
9
Также мне пришлось изменить строку подключения с использования Microsoft.Jet.OLEDB.4.0 на Microsoft.ACE.OLEDB.12.0
Spikolynn
16
Да, хотя доступно 64-разрядное совместимое ядро ​​базы данных Access, требуется, чтобы в системе не было установлено 32-разрядной версии продуктов MS Office (например, 32-разрядного MS Word), что является большой проблемой. Обходной путь заключается в том, что вы используете 32-разрядную версию Access Database Engine 2010 и принудительно запускаете приложение .NET в 32-разрядном режиме (например, выбирая платформу x86 в Configuration Manager). И правильное решение состоит в том, чтобы заменить MS Access лучшей альтернативой.
Массуд Каари
3
нубский вопрос: могу ли я распространять этот драйвер как "в моем приложении" или каждый пользователь, который хочет использовать мое приложение, должен установить его вручную?
philx_x