Подтвердить что ты не робот

Поставщик "Microsoft.ACE.OLEDB.12.0" не зарегистрирован на локальном компьютере, а экспорт данных в MS ACCESS

Я начинаю использовать Microsft.ACE.OLEDB 12.0. Я создаю приложение Winforms VS 2010.

И создайте функцию для данных данных данных экспорта в файл MS Access. Я использую Microsoft Oledb

для экспорта данных сетки данных в файл MS Access. Но я получаю эту ошибку, когда пытаюсь экспортировать

для доступа к ms.

Пожалуйста, смотрите изображение ниже.

enter image description here

Я также ссылаюсь на библиотеку объектов Microsoft.Office 12.0 в своем приложении.

enter image description here

Конфигурация пакетной сборки

enter image description here

Пожалуйста, помогите.

4b9b3361

Ответ 1

Ссылка на биты Access Interop не имеет ничего общего с вашим исключением, и Access Interop не требуется использовать классы в System.Data.OleDb.

Проблема возникает, когда у вас есть приложение, скомпилированное для AnyCPU Platform, вы работаете на 64-битной системе, а установленный поставщик ADO.NET(Microsoft ACE.OLEDB.12.0) - это 32-разрядная версия.

При использовании целевой платформы AnyCpu ваш код будет выполнен как 64-битный код на 64-битных системах и 32-битный код на 32-битных системах. Приложение, выполненное как 64-битное, не может использовать 32-битные драйверы (и наоборот). Теперь добавьте в смесь тот факт, что Microsoft.ACE.OLEDB.12.0 имеет две разные версии. Один для 64-битного и один для 32-битного, и они не могут быть установлены вместе на одном компьютере.

Простейшим обходным решением является изменение целевой платформы вашего приложения через меню Visual Studio

 BUILD -> Configuration Manager -> Active Solution Platform -> x86

Если параметр x86 еще не существует, выберите NEW, назовите его x86, Copy Settings from AnyCPU и проверьте Create new project platforms

Если вы считаете, что использование 32-битного приложения в 64-битной операционной системе - это потеря производительности или чего-то, чего следует избегать, тогда подумайте дважды и прочитайте эта ссылка где критически рассматриваются PRO и CONS AnyCpu. Если у вас нет конкретной причины использовать AnyCpu, лучше остановиться с x86.

Конечно, еще один вариант - удалить 32-битную версию и установить 64-битную версию ACE здесь, а затем запустить приложение как AnyCpu on 64-битные системы. Но это может быть кошмаром для ваших сценариев развертывания. Что делать, если версия 32-разрядного Microsoft Office установлена ​​на вашей целевой машине x64? Office устанавливает свою бит-совместимую версию ACE и, как сказано, невозможно установить 32-битную и 64-битную ACE на одном компьютере.
Теперь вы также должны попросить своего клиента переустановить Office на 64 бит, чтобы ваше приложение с 64-битным интерфейсом было счастливым.

UPDATE


Ситуация немного изменилась с новейшими версиями Visual Studio. Теперь есть новый вариант, который является стандартом для новых проектов. Он называется AnyCPU Предпочитайте 32-битный режим. Подробнее об этой ссылке: Что AnyCPU действительно имеет значение с .NET 4.5 и Visual Studio 11, и еще один интересный пост (хотя и для Sql Server Compact) этот Проблема с любым процессором - Предпочитаете 32-разрядный-BadImageFormatException

Ответ 2

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

Ответ 3

У меня такая же проблема, когда мы читаем файл Excel.

История проблемы:

Недавно мы перенесли наше приложение с 32-разрядной до 64-разрядной из-за потребности в памяти. Для этого мы перенесли наши окна 7 с 32-битного на 64-битный. Но мы все же установили 32-разрядный офис на наших машинах.

потому что у нас возникла эта проблема при импорте данных Excel в приложение.

Решение

Я загрузил 64-битную версию http://www.microsoft.com/en-us/download/details.aspx?id=13255 и установил с аргументом как,

AccessDatabaseEngine_x64.exe/passive

Без изменения кода моя проблема будет решена.

Примечание:

В 64-битной операционной системе и 64-битном офисе мои функции отлично работали без этого исправления. Это исправление требуется только в том случае, когда наше приложение работает в 64-разрядной версии на 64-разрядной ОС, на котором установлено 32-разрядное офисное устройство.

Ответ 4

Основной способ:

Приложение: MVC C#, Для Win Server 64 бит: