Я покажу несколько вариантов решения этой проблемы. Но в начале кратко о возникающей проблеме.
Я использовал следующий вариант подключения к базе nookery.accdb
1 2 |
var conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\SQL\nookery.accdb"); conn.Open(); |
Однако возникала ошибка «Поставщик «Microsoft.ACE.OLEDB.12.0″ не зарегистрирован на локальном компьютере».
Хотелось бы упомянуть что
accdb — формат файла является более новым и идет с 2010 версии офиса, mdb более старый и шел до 2007 включительно. Соответственно и подключений с более старой версией mdb не возникает, однако accdb такого сказать нельзя. Проблема сводиться к разрядности системы и установленной Microsoft Access. Когда вы его устанавливали у вас автоматически или вручную была установлена разрядность согласно вашей операционной системы. Однако могло быть и такое что вы ставили Microsoft Access 32 битную на 64 битную Windows. А теперь рассмотрим два решения этой проблемы:
Вам необходимо создать пустой проект и запустить следующий метод:
1 2 3 4 5 6 7 8 9 |
public void Information() { DataTable table = new OleDbEnumerator().GetElements(); string inf = ""; foreach (DataRow row in table.Rows) inf +=row["SOURCES_NAME"]+ "\n"; MessageBox.Show(inf); } |
Далее вам необходимо вызвать данным метод и проанализировать информацию.
И изменить целевую платформу в сборке на x86, а потом на x64. Посмотрев в информации под какую сборку у вас будет доступен поставщик.
Покажу на примере первоначально у меня целевая сборка была под Any CPU метод показал следующую информацию :
Посмотрев на информацию мы не обнаруживаем в ней Microsoft.ACE.OLEDB.12.0. Меняем целевую сборку на x86
Как видим результат остался неизменным, переключаемся на x64
Как мы видим появился доступный нам поставщик Microsoft.ACE.OLEDB.12.0 Для этого всего лишь требовалось сменить целевую платформу.
Необходимо так же добавить или установить в диспетчере конфигурации как показано ниже x64
Если выбора x64 нет, в этом окне так же выберите пункт добавить и соответственно добавьте выбор x64.
Так же необходимо поменять в проекте на x64
Вторым решением будет скачать 2007 Office System Driver ссылка
Таким образом мы рассмотрели два решения существующей проблемы с Поставщиком «Microsoft.ACE.OLEDB.12.0»
Видео в студию!
а то нихрена не понятно, какой проект, где писать метод, по идее должен быть создан класс раз проект пустой об этом ни слова не сказано! кроме того, так ничего не заработает, так как нет точки входа. так что видео в студию!
Пустой проект подразумевает создания main метода а соответственно точки входа. Вам достаточно добавить метод с сайта и вызвать его, можно просто скопировать, содержимое метода в метод main и запустить проект. Я вроде как доступно разъяснил на сайте, достаточно вызвать метод представленный на сайте, метод как то можно вызвать иначе без main?
Автору огромная благодарность! Полдня копал как подключить файл ACCDB к Вьюжал студии и наконец понял, где собака порылась 🙂
Провайдер Microsoft.ACE.OLEDB.12.0 доступен в 64битном варианте, а Студия она ж 32х-битная до сих пор. Хочется в дизайн-тайм получить доступ, для этого похоже придётся поставтиь 32хбитный офис. Пичалька. Но автору всё равно спасибо!
Пожалуйста. Рад был помочь!
Спасибо, помогло 🙂
Хотелось из ВижуалСтудии подцепиться к файлу базы данных. Однако, 64-битная винда в паре с 64-битным офиосом показывали фигу. Сделал как автор велел, глянул и поменял офис на 32-битный. Всё заработало! Автору респект.
Спасибо за информацию! Она натолкнула меня на верное решение (указано внизу комментария).
Перевод проекта в 64-х, так как у вас рекомендовано, мне не дал положительного результата. У меня Win10 c установленной AccessRuntime2010, но VisualStudio2019 в упор не видела провайдер Microsoft.ACE.OLEDB.12.0 при любой разрядности целевой платформы. При 32-разрядной целевой платформе успешно работал Microsoft.Jet.OLEDB.4.0 и обеспечивал подключение к файлам mdb Access 2003. При переключении проекта с 32-х на 64-х исчезали оба провайдера, и ACE и Jet. Проблема решилась только после загрузки файла AccessDatabaseEngine.exe (ссылка ниже).
https://www.microsoft.com/en-us/download/confirmation.aspx?id=13255
После инсталляции, провайдер Microsoft.ACE.OLEDB.12.0 стал доступен при любой разрядности целевой платформы, 32 и 64. Теперь при 32-разрядном проекте в среде VS2019 доступны на выбор оба провайдера — они оба успешно манипулируют файлами Access mdb версии 2002-2003.
Отлично!!! Сработало!!! СПАСИБО!
Пожалуйста!
лучший!
System.Data.OleDb.OleDbException: «Ядро СУБД Microsoft Access более не может открыть файл «C:\Users\Professional\Desktop\hgj» или записать в него данные. Файл уже открыт другим пользователем для монопольного доступа, либо требуется разрешение на просмотр и запись данных.»
Че делать?
Вам система пишет что фаил уже открыт, либо в приложении открыли или не закрыли соединение из приложения. Обычная перезагрузка пк поможет.
Благодарю! Всё доходчиво объяснил!