Использовать базу данных Microsoft Access (.accdb / .mdb) напрямую в проектах .NET MAUI нельзя по нескольким фундаментальным причинам:
- Отсутствие кроссплатформенности
- Только Windows: Движок Microsoft Access (ACE/Jet) — это чисто Windows-технология. Он завязан на системные библиотеки Windows и COM-интерфейсы.
- Проблема MAUI: .NET MAUI предназначен для работы на Android, iOS и macOS, где этого движка просто не существует. Вы не сможете запустить драйвер Access на iPhone или Android-планшете.

- Ограничения среды выполнения (.NET Runtime)
- Для работы с Access обычно используются провайдеры OLEDB или ODBC.
- В современных кроссплатформенных реализациях .NET (которые используют мобильные платформы) эти провайдеры либо не поддерживаются, либо ограничены, так как требуют специфических библиотек операционной системы Windows.
- Технические лимиты Access
- Локальная сеть (LAN): Access спроектирован для работы внутри локальной сети через файловый доступ. Он плохо работает в «нестабильных» сетях и совершенно не подходит для мобильного интернета.
- Безопасность: Хранить файл Access внутри мобильного приложения небезопасно, а прямое подключение мобильного устройства к файлу на сервере технически практически нереализуемо и ведет к разрушению данных.
Что использовать вместо Access?
Если у вас уже есть готовая база в Access, данные из неё лучше всего экспортировать в SQLite или мигрировать на полноценный SQL Server.
| Решение |
Когда выбирать |
| SQLite |
Если вам нужна локальная база данных прямо на устройстве (самый популярный выбор для MAUI). |
| REST API + SQL Server/PostgreSQL |
Если данные должны храниться на сервере и быть доступны всем пользователям. Приложение общается с сервером через интернет. |
| Azure Mobile Apps / Firebase |
Если нужна облачная синхронизация и работа в офлайн-режиме. |
Рекомендуется для MAUI - sqlite-net-pcl
Это популярная библиотека-обертка с открытым исходным кодом, которую Microsoft официально рекомендует в документации по .NET MAUI.
- Тип: Легковесный ORM.
- Стиль работы: Вы работаете с объектами C#. Библиотека сама создает таблицы на основе ваших классов (атрибуты [Table], [PrimaryKey]).
- Плюсы:
- Минимум кода: метод CreateTable<T>()создает схему автоматически.
- Встроенная поддержка асинхронности (SQLiteAsyncConnection).
- Проще в освоении для мобильной разработки.
- Минусы: Ограниченная поддержка сложных SQL-функций и связей (например, внешние ключи требуют дополнительных усилий).
Microsoft.Data.Sqlite
Это официальный низкоуровневый провайдер от Microsoft, реализующий стандартные абстракции ADO.NET.
- Тип: NET провайдер (низкий уровень).
- Стиль работы: Вы вручную пишете SQL-запросы (CREATE TABLE, INSERT, SELECT), создаете команды (SqliteCommand) и читаете данные через ридеры (SqliteDataReader).
- Плюсы:
- Полный контроль над SQL и производительностью (в некоторых тестах в разы быстрее при массовых вставках).
- Поддерживает современные возможности SQLite (например, FTS5, шифрование).
- Является основой для Entity Framework Core.
- Минусы: Требует написания большого количества шаблонного кода (Boilerplate).
Сводная таблица
|
Функция
|
sqlite-net-pcl
|
Microsoft.Data.Sqlite
|
|
Подход
|
ORM (Объекты)
|
SQL (Запросы)
|
|
Схема БД
|
Создается из классов C#
|
Создается вручную через SQL
|
|
Сложность
|
Низкая (быстрый старт)
|
Средняя (нужно знать SQL)
|
|
Производительность
|
Хорошая для обычных задач
|
Высокая для сложных операций
|
|
Для чего лучше
|
Типичные мобильные приложения
|
Сложная логика БД или EF Core
|
Для установки любой из этих баз данных в проект .NET MAUI используется менеджер пакетов NuGet.
Установка sqlite-net-pcl (ORM)
Этот вариант идеален для быстрого старта.
- Нажмите правой кнопкой на ваш проект в Solution Explorer и выберите Manage NuGet Packages.
- Найдите и установите пакет: sqlite-net-pcl.
- Важно: Для корректной работы на всех платформах также установите пакет bundle_green (обычно подтягивается автоматически, но лучше проверить).
Установка Microsoft.Data.Sqlite (ADO.NET)
Если вы предпочитаете писать чистый SQL.
- В NuGet-менеджере найдите и установите: Data.Sqlite.
- Для полноценной работы с Entity Framework Core (если нужно) устанавливается пакет EntityFrameworkCore.Sqlite. [2]
Как физически создать файл базы?
В мобильных приложениях файл БД не "устанавливается", а создается программно при первом запуске приложения в защищенной папке устройства.
Пример инициализации для sqlite-net-pcl:
// Определяем путь к файлу (работает и на iOS, и на Android)
string dbPath = Path.Combine(FileSystem.AppDataDirectory, "MyData.db3");
// Создаем подключение (это также создаст файл, если его нет)
var db = new SQLiteAsyncConnection(dbPath);
// Создаем таблицу на основе класса
await db.CreateTableAsync<MyModel>();
А как быть с данными из Access?
Файл .accdb нельзя просто скопировать в проект. Вам нужно:
- Экспортировать данные из Access в формат .sql или .csv.
- Импортировать их в новый файл SQLite (например, через утилиту DB Browser for SQLite).
- Добавить готовый файл .db3 в проект MAUI как Embedded Resource или MauiAsset, чтобы приложение могло скопировать его в свою рабочую папку при первом запуске.
Источник статьи