Программирование

Подключение Access к WinForms: шаги и устранение ошибок

Узнайте, как правильно подключить базу Access к приложению Windows Forms в Visual Studio, выбрать драйвер ACE, настроить разрядность и избежать типичных ошибок.

Как подключить базу данных Access к приложению Windows Forms в Visual Studio?

Я разрабатываю приложение с формами и хочу вывести данные из таблиц Access в DataGridView. При попытке подключить созданную БД возникают ошибки (см. скриншот в приложении). Я уже:

  • Поменял разрядность проекта (32‑/64‑бит).
  • Перемещал файл БД в разные папки.
  • Проверил, что компоненты Visual Studio установлены.

Однако ошибки продолжают появляться. Как правильно подключить Access‑базу к проекту, какие компоненты нужны, и какие шаги предпринять, чтобы избежать подобных ошибок?

Если понадобится, могу предоставить детали ошибки и конфигурацию проекта.

Краткий ответ
Для работы с Access в WinForms нужно установить подходящий OLE DB‑драйвер (Microsoft ACE 12.0/16.0), выбрать в настройках проекта правильную разрядность (x86 для 32‑битных драйверов или x64 для 64‑битных) и прописать корректную строку подключения. После этого привяжите DataTable к DataGridView.


Содержание


Понимание разрядности и драйверов

Драйвер Разрядность Применение
Microsoft.Jet.OLEDB.4.0 32‑бит Поддержка старых .mdb файлов
Microsoft.ACE.OLEDB.12.0 32‑бит и 64‑бит Поддержка .mdb и .accdb (с 2007 г.)
Microsoft.ACE.OLEDB.16.0 64‑бит Современные версии Access, .NET 6/7

Важно – если в системе установлены 32‑битные и 64‑битные версии Office/ACE, Visual Studio может «запутаться» и выдавать ошибку «Provider is not registered». Поэтому ключевой момент – согласовать разрядность драйвера и целевой платформы проекта.


Установка и настройка Microsoft Access Database Engine

  1. Скачайте подходящий Redistributable.

    • Для 32‑битных приложений – ACE 12.0 (Microsoft Access Database Engine 2010) или ACE 16.0 (2016).
    • Для 64‑битных – ACE 16.0 64‑битный (доступен в одном пакете).
      Скачать можно с официального сайта Microsoft:
      Microsoft Access Database Engine 2016 Redistributable.
  2. Установите выбранный пакет. Если в системе уже есть 32‑битный ACE и вы пытаетесь установить 64‑битный, Windows покажет предупреждение – это нормально, просто подтвердите установку.

  3. Проверьте наличие драйвера в реестре (для 32‑битного: HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{00000000-0000-0000-0000-000000000000} и для 64‑битного: HKEY_CLASSES_ROOT\CLSID\{00000000-0000-0000-0000-000000000000}).

Совет – если вы работаете в среде, где Office не установлен, всегда используйте Redistributable, а не «драйверы Office», чтобы избежать конфликтов.


Конфигурация проекта и Visual Studio

  1. Откройте свойства проектаBuild.
  2. Установите Platform target:
    • x86 – если вы используете 32‑битный ACE (Jet или ACE 12).
    • x64 – если вы установили 64‑битный ACE 16.
  3. В том же окне снимите галочку Prefer 32‑bit, если выбрали x64.

Почему это важно – начиная с Visual Studio 2022, сам IDE работает в 64‑битном режиме, а встроенные инструменты данных (Data Connections) иногда требуют 32‑битный процесс. Если ваш проект компилируется как x86, IDE будет запускать его в 32‑битном процессе, и драйверы 32‑битные будут корректно обнаружены.

  1. Проверьте свойства DebugUse custom build process (необязательно).

Создание строки подключения и привязка к DataGridView

csharp
using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;

public void LoadData()
{
    string dbPath = @"|DataDirectory|\MyDatabase.accdb";
    // Для .mdb: Provider=Microsoft.Jet.OLEDB.4.0;
    string connStr = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={dbPath};Persist Security Info=False;";

    using (OleDbConnection conn = new OleDbConnection(connStr))
    {
        conn.Open();
        using (OleDbCommand cmd = new OleDbCommand("SELECT * FROM tblHotels ORDER BY HotelName", conn))
        {
            DataTable dt = new DataTable();
            dt.Load(cmd.ExecuteReader());
            dataGridView1.DataSource = dt;
        }
    }
}
  • Путь |DataDirectory| автоматически заменяется на каталог, где расположен исполняемый файл.
  • Если база находится в другом месте, укажите полный путь, но учтите, что при публикации проекта его нужно будет пересобрать.

Как проверить – используйте OleDbConnectionStringBuilder в Visual Studio:
var builder = new OleDbConnectionStringBuilder(); builder.Provider = "Microsoft.ACE.OLEDB.12.0"; builder.DataSource = @"C:\Data\MyDatabase.accdb";


Отладка распространенных ошибок

Ошибка Причина Как исправить
Microsoft.ACE.OLEDB.12.0 provider is not registered on the local machine Драйвер 32‑бит/64‑бит не установлен, либо выбран неверный Platform target Установите нужный ACE Redistributable; в настройках проекта выберите совместимую разрядность
The selected connection uses an unsupported database provider В Visual Studio используется 64‑битный процесс, но подключён 32‑битный драйвер Включите «Prefer 32‑bit» в свойствах проекта, либо установите 64‑битный ACE
Data source cannot be found Неправильный путь к файлу .accdb/.mdb Проверьте путь, используйте `
Jet OLEDB 4.0 provider is not registered Не установлен 32‑битный Jet Driver Установите Office 2003/2007/2010 с 32‑битным OLEDB, либо используйте ACE вместо Jet

Рекомендация – сначала создайте простую консольную программу, которая открывает соединение и выводит количество строк. Если она работает, переходите к WinForms. Это позволяет быстро локализовать проблему.


Заключение

  1. Установите подходящий Microsoft Access Database Engine и убедитесь, что его разрядность совпадает с целевой платформой проекта.
  2. Настройте проект в Visual Studio: Platform target = x86 (для ACE 12/Jet) или x64 (для ACE 16).
  3. Проверьте строку подключения – используйте Provider=Microsoft.ACE.OLEDB.12.0 для .accdb (или Microsoft.Jet.OLEDB.4.0 для .mdb).
  4. Привяжите DataTable к DataGridView через DataSource.
  5. Отладьте ошибки, внимательно следя за разрядностью и путями к файлам.

Следуя этим шагам вы сможете стабильно подключать Access‑базы к WinForms‑приложениям без ошибок «provider is not registered» и «unsupported database provider».


Источники

  1. Microsoft Learn: Connect to Access database in .NET Framework apps
  2. Stack Overflow: “Microsoft.ACE.OLEDB.12.0 provider is not registered on the local machine”
  3. Microsoft Q&A: How to fix The microsoft.ACE.OLEDB.12.0 provider is not registered on the local machine
  4. Microsoft Learn: Unsupported database provider
  5. Microsoft Access Database Engine 2016 Redistributable download
  6. Stack Overflow: Connect database with DataGridView
Авторы
Проверено модерацией
Модерация
Подключение Access к WinForms: шаги и устранение ошибок