Подключение 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 Access Database Engine
- Конфигурация проекта и Visual Studio
- Создание строки подключения и привязка к 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
-
Скачайте подходящий 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.
-
Установите выбранный пакет. Если в системе уже есть 32‑битный ACE и вы пытаетесь установить 64‑битный, Windows покажет предупреждение – это нормально, просто подтвердите установку.
-
Проверьте наличие драйвера в реестре (для 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
- Откройте свойства проекта → Build.
- Установите Platform target:
- x86 – если вы используете 32‑битный ACE (Jet или ACE 12).
- x64 – если вы установили 64‑битный ACE 16.
- В том же окне снимите галочку Prefer 32‑bit, если выбрали x64.
Почему это важно – начиная с Visual Studio 2022, сам IDE работает в 64‑битном режиме, а встроенные инструменты данных (Data Connections) иногда требуют 32‑битный процесс. Если ваш проект компилируется как x86, IDE будет запускать его в 32‑битном процессе, и драйверы 32‑битные будут корректно обнаружены.
- Проверьте свойства Debug → Use custom build process (необязательно).
Создание строки подключения и привязка к DataGridView
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. Это позволяет быстро локализовать проблему.
Заключение
- Установите подходящий Microsoft Access Database Engine и убедитесь, что его разрядность совпадает с целевой платформой проекта.
- Настройте проект в Visual Studio:
Platform target = x86(для ACE 12/Jet) илиx64(для ACE 16). - Проверьте строку подключения – используйте
Provider=Microsoft.ACE.OLEDB.12.0для .accdb (илиMicrosoft.Jet.OLEDB.4.0для .mdb). - Привяжите
DataTableкDataGridViewчерезDataSource. - Отладьте ошибки, внимательно следя за разрядностью и путями к файлам.
Следуя этим шагам вы сможете стабильно подключать Access‑базы к WinForms‑приложениям без ошибок «provider is not registered» и «unsupported database provider».
Источники
- Microsoft Learn: Connect to Access database in .NET Framework apps
- Stack Overflow: “Microsoft.ACE.OLEDB.12.0 provider is not registered on the local machine”
- Microsoft Q&A: How to fix The microsoft.ACE.OLEDB.12.0 provider is not registered on the local machine
- Microsoft Learn: Unsupported database provider
- Microsoft Access Database Engine 2016 Redistributable download
- Stack Overflow: Connect database with DataGridView