Использование базы данных SQLite в приложении Windows
Вы можете использовать SQLite для хранения и извлечения данных в упрощенной базе данных на устройстве пользователя. В этом руководстве показано, как это сделать в приложениях пакета SDK для приложений для приложений windows.
Некоторые преимущества использования SQLite для локального хранения данных
✔️ SQLite является упрощенным и автономным. Это библиотека кода без других зависимых компонентов. Ее не требуется настраивать.
✔️ Тут нет сервера базы данных. Клиент и сервер работают в одном процессе.
✔️ SQLite находится на общедоступном домене, поэтому вы можете свободно использовать и распространять ее в вашем приложении.
✔️ SQLite работает на разных платформах и архитектурах.
Подробнее о SQLite см. здесь.
Выбор слоя абстрагирования
Рекомендуется использовать Entity Framework Core или библиотеку SQLite с открытым кодом, созданную корпорацией Майкрософт.
Entity Framework Core
Entity Framework (EF) — это объектно-реляционный модуль сопоставления, позволяющий разработчикам работать с реляционными данными с помощью объектов, специализированных для доменов. Если вы уже использовали эту платформу для работы с данными в других приложениях .NET, вы можете использовать тот же код в приложении пакета SDK для приложений Windows, и он будет работать с соответствующими изменениями в строка подключения.
Чтобы испытать ее, см. раздел Начало работы с EF Core.
Библиотеке SQLite
Библиотека Microsoft.Data.Sqlite реализует интерфейсы в пространстве имен System.Data.Common. Майкрософт активно поддерживает эти реализации и предоставляет интуитивно понятную оболочку для низкоуровневых собственных API-интерфейсов SQLite.
В остальных разделах этого руководства приведены инструкции по работе с этой библиотекой.
Настройка решения для использования библиотеки Microsoft.Data.SQlite
Мы начнем с базового проекта пакета SDK для приложений Windows, а затем установим пакет NuGet SQLite.
Все поддерживаемые версии Windows поддерживают SQLite, поэтому приложению не нужно упаковать библиотеки SQLite. Вместо этого ваше приложение может использовать версию SQLite, которая поставляется вместе с Windows. Это обеспечивает следующие преимущества.
✔️ Уменьшает размер приложения, так как не требуется скачивать двоичную библиотеку SQLite, а затем упаковывать ее в качестве части приложения.
✔️ Отсутствие необходимости в принудительной передаче новой версии вашего приложения пользователям, если SQLite опубликует важные исправления ошибок и уязвимостей безопасности в SQLite. Версия Windows SQLite обслуживается корпорацией Майкрософт совместно с SQLite.org.
✔️ Загрузка приложения может быть быстрее, так как, скорее всего, версия SDK-пакета SQLite будет уже загружена в память.
Начнем с добавления класса в проект с именем DataAccess. Если вы планируете предоставить общий доступ к логике доступа к данным с другим клиентским кодом, можно использовать проект библиотеки классов .NET для хранения кода доступа к данным, но мы не будем использовать его в нашем примере.
Щелкните правой кнопкой мыши решение, а затем нажмите кнопку Управление пакетами NuGet для решения.

На этом этапе у вас есть выбор. Можно использовать версию SQLite, которая входит в состав Windows, или если по какой-либо причине вы хотите использовать конкретную версию SQLite, можно добавить библиотеку SQLite в пакет. Мы будем использовать версию SQLite, которая входит в состав Windows.
Перейдите на вкладку «Обзор «, найдите пакет Microsoft.Data.SQLite и установите последнюю стабильную версию.

Добавление данных в базу данных SQLite и их извлечение
Мы выполним следующие действия.
1️⃣ Подготовка класса доступа к данным.
2️⃣ Инициализация базы данных SQLite.
3️⃣ Вставка данных в базу данных SQLite.
4️⃣ Извлечение данных из базы данных SQLite.
5️⃣ Добавление базового пользовательского интерфейса.
Подготовка класса доступа к данным
DataAccess Откройте класс в проекте и сделайте этот класс статическим.
Хотя в нашем примере код доступа к данным помещается в статический класс, это вариант разработки и является полностью необязательным.
public static class DataAccess
Добавьте следующие using инструкции в начало этого файла.
using Microsoft.Data.Sqlite; using System.Collections.Generic;
Инициализация базы данных SQLite
Добавьте метод в DataAccess класс, который инициализирует базу данных SQLite.
public async static void InitializeDatabase() < await ApplicationData.Current.LocalFolder .CreateFileAsync("sqliteSample.db", CreationCollisionOption.OpenIfExists); string dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "sqliteSample.db"); using (var db = new SqliteConnection($"Filename=")) < db.Open(); string tableCommand = "CREATE TABLE IF NOT " + "EXISTS MyTable (Primary_Key INTEGER PRIMARY KEY, " + "Text_Entry NVARCHAR(2048) NULL)"; var createTable = new SqliteCommand(tableCommand, db); createTable.ExecuteReader(); >>
Приведенный выше код, использующий ApplicationData элементы, будет работать только для упакованных приложений, работающих в контейнере приложений. Все остальные приложения Windows должны обращаться к ApplicationData членам через класс ApplicationDataManager .
Этот код создает базу данных SQLite и сохраняет ее в локальном хранилище данных приложения.
В этом примере мы используем имя базы данных sqlliteSample.db , но вы можете использовать любое имя при условии, что оно будет использоваться во всех объектах SqliteConnection, экземпляры которых необходимо создать. В рабочем приложении сведения о подключении, такие как имя файла базы данных, должны храниться в конфигурации приложения, а не жестко закодированы (см. статью «Добавление Конфигурация приложений Azure с помощью visual Studio Подключение ed Services«).
В конструкторе файла App.xaml.cs проекта вызовите InitializeDatabase метод DataAccess класса. Это обеспечит создание или открытие базы данных при каждом запуске приложения.
public App()
Вставка данных в базу данных SQLite
Добавьте метод в DataAccess класс, который вставляет данные в базу данных SQLite. Этот код использует параметры в запросе для предотвращения атак путем внедрения кода SQL.
public static void AddData(string inputText) < string dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "sqliteSample.db"); using (var db = new SqliteConnection($"Filename=")) < db.Open(); var insertCommand = new SqliteCommand(); insertCommand.Connection = db; // Use parameterized query to prevent SQL injection attacks insertCommand.CommandText = "INSERT INTO MyTable VALUES (NULL, @Entry);"; insertCommand.Parameters.AddWithValue("@Entry", inputText); insertCommand.ExecuteReader(); >>
Извлечение данных из базы данных SQLite
Добавьте метод, который получает все строки данных из таблицы в базе данных SQLite.
public static List GetData() < var entries = new List(); string dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "sqliteSample.db"); using (var db = new SqliteConnection($"Filename=")) < db.Open(); var selectCommand = new SqliteCommand ("SELECT Text_Entry from MyTable", db); SqliteDataReader query = selectCommand.ExecuteReader(); while (query.Read()) < entries.Add(query.GetString(0)); >> return entries; >
Метод Read считывает строки возвращаемых данных. Возвращается true , если есть строки слева, в противном случае возвращается false .
Метод GetString возвращает значение конкретного столбца в виде строки. Он принимает целое число, представляющее собой отсчитываемый от нуля порядковый номер столбца необходимых данных. Можно использовать похожие методы, такие как GetDataTime и GetBoolean . Выберите метод в зависимости от типа данных в столбце.
Порядковый номер параметра не так важен в этом примере, так как мы выбираем все записи в одном столбце. Тем не менее, если несколько столбцов являются частью запроса, используйте порядковое значение для получения столбца, из которого требуется извлечь данные.
Добавление базового пользовательского интерфейса
В файле MainWindow.xaml проекта добавьте следующий код XAML.
Этот базовый пользовательский интерфейс предоставляет пользователю поле TextBox , которое можно использовать для ввода строки, которую мы добавим в базу данных SQLite. Мы подключимся Button в этом пользовательском интерфейсе к обработчику событий, который будет получать данные из базы данных SQLite и затем отображать их в ListView .
В файле MainWindow.xaml.cs добавьте следующий обработчик. Это метод, который мы связали с кнопкой Click событие Button в пользовательском интерфейсе.
private void AddData(object sender, RoutedEventArgs e)
Мы также хотим убедиться, что все существующие данные загружаются при запуске приложения. Добавьте строку кода в MainWindow конструктор для вызова GetData() .
public MainWindow()
Вот и все. Изучите Microsoft.Data.Sqlite чтобы узнать, что еще можно сделать с вашей базой данных SQLite. Ознакомьтесь со ссылками ниже, чтобы узнать о других способах использования данных в приложениях Windows.
Следующие шаги
Подключение приложения непосредственно к базе данных SQL Server
Совместное использование кода между разными приложениями на различных платформах
Добавление страниц с основными и подробными данными с помощью серверов Azure SQL
См. статью Customer Orders Database sample (Пример базы данных заказов клиентов).
SQLite в C# и .NET
SQLite является одной из наиболее популярных СУБД. К ее преимуществам можно отнести портативность и мобильность. Для работы с базой данной SQLite не требуется наличие сервера, как в случае с MS SQL Server. И .NET предоставляет возможности для работы с SQLite в рамках приложения на языке C#.
Прежде всего для работы SQLite в C# необходимо установить через Nuget пакет Microsoft.Data.Sqlite :

SqliteConnection
Для создания подключения к бд SQLite применяется класс SqliteConnection :
Он имеет два конструктора:
SqliteConnection() SqliteConnection(String)
Второй конструктор в качестве параметра принимает строку подключения.
Строка подключения для SQLite
Строка подключения представляет набор параметров в виде пар ключ=значение , которые отделяются друг от друга точкой с запятой. Рассмотрим, какие параметры может принимать строка подключения для SQLite.
Data Source
Указывает на путь к файлу базы данных. В качестве альтернативы можно использовать параметры DataSource (без пробела) и Filename . При этом можно определять абсолютные и относительные пути. Относительные пути рассматриваются относительно папки приложения.
Если этот параметр не указан, то SQLite создает временную базу данных на диске, которая удаляется при закрытии подключения.
Mode
Устанавливает режим подключения и может принимать следующие значения:
- ReadWriteCreate : открывает базу данных для чтения и записи. Если база данных не существует, то она автоматически создается. Это режим применяется по умолчанию.
- ReadWrite : открывает базу данных для чтения и записи.
- ReadOnly : открывает базу данных только для чтения.
- Memory : создает и открывает базу данных в памяти.
Cache
Устанавливает режим кэширования. Может принимать следующие значения:
- Default : применяет режим по умолчанию используемой библиотеки SQLite. Этот режим применяется по умолчанию.
- Private : для каждого подключения создается свой приватный кэш.
- Shared : подключения используют один общий кэш.
Password
Устанавливает ключ шифрования. Если данный параметр установлен, то сразу после открытия подключения базе данных посылается команду PRAGMA key с ключом шифрования.
Foreign Keys
Указывает, будет ли база данных поддерживать внешние ключи. Может принимать следующие значения:
- True : сразу после открытия подключения посылает команду PRAGMA foreign_keys = 1
- False : сразу после открытия подключения посылает команду PRAGMA foreign_keys = 0
Если параметр не применяется, то по умолчанию ничего — никаких команд PRAGMA foreign_keys не посылается.
Recursive triggers
Указывает, будут ли поддерживаться рекурсивные триггеры. Может принимать два значения:
- True : сразу после открытия подключения посылает команду PRAGMA recursive_triggers
- False : не посылает команду PRAGMA recursive_triggers . Значение по умолчанию.
Определение строки подключения
В большинстве случаев мы сможем обойтись одним параметром — путем к базе данных:
string connectionString = "Data Source=usersdata.db";
Но естественно при необходимости можно применять и другие параметры, например, кэширование и режим:
string connectionString = "Data Source=usersdata3.db;Cache=Shared;Mode=ReadOnly;";
Подключение к базе данных
Для открытия подключения у объекта SqliteConnection вызывается метод Open() :
using System; using Microsoft.Data.Sqlite; namespace HelloApp < class Program < static void Main(string[] args) < using (var connection = new SqliteConnection("Data Source=usersdata.db")) < connection.Open(); >Console.Read(); > > >
Если база данных из строки подключения не существует, то при выполнении метода Open() она создается автоматически (если действует режим по умолчанию — ReadWriteCreate )
Причем в данном случае для открытия подключения применяется синхронный метод, а не асинхронный. Дело в том, что SQLite не поддерживает асинхронные операции чтения/записи. Поэтому при использовании асинхронных методов в ADO.NЕT при обащении к базе данных SQLite они будут выполняться синхронно.
Начало работы с SQLite в Visual Studio на C#: создание бд, таблиц, вставка записей и отображение
Для серьезных, высоконагруженных проектов с многопользовательской (или сетевой) поддержкой для работы с базами данных обычно используются сервера баз данных. Однако, для программ, которые будут работать на одном компьютере с относительно небольшим объемом информации, нередко применяют имитацию этих самих серверов – особые библиотеки. Одна из наиболее распространенных – это SQLite. Именно с SQLite мы и познакомимся в данном материале.

Итак, сначала качаем и подключаем к проекту библиотеку System.Data.SQLite.dll. Используем директивы using
using System.Data.SQLite; using System.IO; using System.Data;
И начинаем работать. Необходимые нам переменные:
private String dbFileName; private SQLiteConnection m_dbConn; private SQLiteCommand m_sqlCmd;
После загрузки формы (событие Load) инициализируем их:
m_dbConn = new SQLiteConnection(); m_sqlCmd = new SQLiteCommand(); Кидаем на форму textbox и кнопку (элемент button) и на событие клика по ней вставляем следующий код: dbFileName = textBox1.Text+".sqlite"; if (!File.Exists(dbFileName)) SQLiteConnection.CreateFile(dbFileName);
Чтобы появилась вкладка с кодом, необходимо в визуальном редакторе сделать двойной щелчок по самой кнопке (это если то не знает).
В первой строке мы получаем информацию из текстового поля (название каталога), а во второй, если нет файла с таким названием – создаем в текущем каталоге новую одноимённую базу данных с расширением sqlite.
Теперь научимся создавать таблицы в нашем файле базе данных. Для этого кидаем на форму еще одну кнопку и пишем её обработчик:
try < m_dbConn = new SQLiteConnection("Data Source=" + dbFileName + ";Version=3;"); m_dbConn.Open(); m_sqlCmd.Connection = m_dbConn; m_sqlCmd.CommandText = "CREATE TABLE IF NOT EXISTS Catalog (id INTEGER PRIMARY KEY AUTOINCREMENT, product TEXT, characteristics TEXT)"; m_sqlCmd.ExecuteNonQuery(); MessageBox.Show("Таблица успешно создана!"); >catch (SQLiteException ex)
Запустив программу и попробовав выполнить данный код, мы столкнемся с ошибкой:

Не удается загрузить DLL «SQLite.Interop.dll»: Не найден указанный модуль. (Исключение из HRESULT: 0x8007007E)
Решается просто. Добавим файл SQLite.Interop.dll в папку программы. И снова пробуем запустить. Если получилось, то теперь у нас есть таблица в базе данных sqllite с тремя полями: ид товара, его название, а также характеристики. Структура максимально проста, создана специально для примера, для обучения.
Далее научимся добавлять записи в нашу таблицу. Это также несложно. Добавим на форму еще пару текстбоксов и кнопку. Вот и обработчик данной кнопки:
if (m_dbConn.State != ConnectionState.Open) < dbFileName = "catalog1.sqlite"; m_dbConn = new SQLiteConnection("Data Source=" + dbFileName + ";Version=3;"); m_dbConn.Open(); m_sqlCmd.Connection = m_dbConn; >try < m_sqlCmd.CommandText = "INSERT INTO Catalog ('product', 'characteristics') values ('" + textBox2.Text + "' , '" + textBox3.Text + "')"; m_sqlCmd.ExecuteNonQuery(); >catch (SQLiteException ex) < MessageBox.Show("Error: " + ex.Message); >m_dbConn.Close();
Дальше нам надо научиться выводить сделанные записи (товары) – а то мало ли, вдруг на самом деле там ничего и не записывается? Для этого кидаем на форму датагрид с именем dgvViewer, создаем в нем три столбца (columns) с соответствующими названиями (id, product, characteristics) и еще одну кнопку с кодом:
DataTable dTable = new DataTable(); String sqlQuery; if (m_dbConn.State != ConnectionState.Open) < dbFileName = "catalog1.sqlite"; m_dbConn = new SQLiteConnection("Data Source=" + dbFileName + ";Version=3;"); m_dbConn.Open(); >try < sqlQuery = "SELECT * FROM Catalog"; SQLiteDataAdapter adapter = new SQLiteDataAdapter(sqlQuery, m_dbConn); adapter.Fill(dTable); if (dTable.Rows.Count >0) < dgvViewer.Rows.Clear(); for (int i = 0; i < dTable.Rows.Count; i++) dgvViewer.Rows.Add(dTable.Rows[i].ItemArray); >else MessageBox.Show("Database is empty"); > catch (SQLiteException ex) < MessageBox.Show("Error: " + ex.Message); >m_dbConn.Close();

Несмотря на неказистый внешний вид, наше приложение уже представляет собой рабочий вариант программы, которую можно использовать, к примеру, как сборник записей. В следующих статьях мы уже более подробно будем разбирать данную тему.

Автор этого материала — я — Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML — то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
статьи IT, Visual Studio, sqlite, си шарп, базы данных
Как подключить SQLite к Visual Studio C#
База данных является важной частью большинства современных приложений. Подключение удобной и легкой в использовании базы данных, такой как SQLite, к проекту Visual Studio C# может быть весьма полезным для хранения и обработки данных. SQLite — это высокоэффективная, встраиваемая база данных, которая работает без сервера и не требует больших ресурсов.
В этой статье мы расскажем вам, как подключить SQLite к вашему проекту Visual Studio C# с помощью пошаговой инструкции.
Шаг 1: Установка пакета NuGet
Первым шагом является установка пакета NuGet под названием «System.Data.SQLite», который предоставляет необходимые библиотеки и инструменты для работы с SQLite. Чтобы установить этот пакет, откройте свое решение в Visual Studio C#, нажмите правой кнопкой мыши на проект в обозревателе решений и выберите «Управление пакетами NuGet». В окне Управление пакетами NuGet найдите пакет «System.Data.SQLite», выберите его и нажмите «Установить».
Шаг 2: Создание SQLite Database
После установки пакета NuGet, необходимо создать файл базы данных SQLite. Для этого нажмите правой кнопкой мыши на проект в обозревателе решений, выберите «Добавить» и затем «Новый элемент». В диалоговом окне «Добавить новый элемент» найдите опцию «База данных веб-страницы SQLite» и выберите ее. Укажите имя файла базы данных и нажмите кнопку «Добавить». Это создаст файл базы данных SQLite с расширением .sqlite в вашем проекте.
Подготовка к подключению SQLite к Visual Studio C#
Перед тем, как начать подключать SQLite к Visual Studio C#, необходимо выполнить ряд предварительных шагов:
- Установить SQLite: загрузите дистрибутив SQLite с официального сайта и выполните его установку на вашем компьютере.
- Создать новый проект: откройте Visual Studio и создайте новый проект на языке C#.
- Добавить ссылку на библиотеку SQLite: щелкните правой кнопкой мыши на проекте в обозревателе решений, выберите «Управление пакетами NuGet» и установите пакет «System.Data.SQLite».
После выполнения этих шагов вы будете готовы к подключению SQLite к вашему проекту в Visual Studio C#. Далее вам потребуется написать код для работы с базой данных SQLite.
Установка SQLite и Visual Studio C#
Прежде чем начать подключать SQLite к Visual Studio C#, необходимо установить оба компонента на вашем компьютере. В этом разделе мы рассмотрим пошаговую инструкцию по установке SQLite и Visual Studio C#.
1. Установка SQLite
Перейдите на официальный сайт SQLite по адресу «https://www.sqlite.org» и скачайте последнюю версию SQLite для вашей операционной системы. Обычно это представляет собой простой файл с расширением «.exe».
Запустите загруженный файл и следуйте инструкциям мастера установки для установки SQLite на вашем компьютере. Обычно установка производится в несколько кликов, используя значения по умолчанию.
После завершения установки SQLite, у вас появится возможность использовать SQLite в вашем приложении Visual Studio C#.
2. Установка Visual Studio C#
Перейдите на официальный сайт Microsoft по адресу «https://visualstudio.microsoft.com» и скачайте последнюю версию Visual Studio C#. Обычно это представляет собой установочный файл с расширением «.exe».
Запустите загруженный файл и следуйте инструкциям мастера установки для установки Visual Studio C# на вашем компьютере. Во время установки выберите опцию «Разработка классических приложений на C#» и убедитесь, что компоненты, связанные с разработкой приложений базы данных, установлены.
После завершения установки Visual Studio C#, у вас появится возможность создавать приложения на C# и использовать SQLite в вашем проекте.
Создание нового проекта в Visual Studio C#
Шаг 1: Откройте Visual Studio и выберите «Создать проект» в стартовом окне программы.
Шаг 2: В появившемся окне выберите шаблон «Приложение Windows Forms» и нажмите «Далее».
Шаг 3: Введите название вашего проекта в поле «Имя» и выберите путь для сохранения проекта. Затем нажмите «Создать».
Шаг 4: После создания проекта вам необходимо добавить ссылку на библиотеку SQLite. Для этого щёлкните правой кнопкой мыши на разделе «Ссылки» в обозревателе решений и выберите «Управление пакетами NuGet».
Шаг 5: В окне «Управление пакетами NuGet» введите «System.Data.SQLite» в поле поиска и нажмите «Установить» рядом с библиотекой «SQLite». После установки нажмите «Закрыть».
Шаг 6: Теперь вы можете создать новый файл кода для работы с базой данных SQLite. Щёлкните правой кнопкой мыши на проекте в обозревателе решений, выберите «Добавить» и затем «Новый элемент».
Шаг 7: В появившемся окне выберите «Класс» и нажмите «Добавить».
Шаг 8: Измените имя класса на «Database.cs» и нажмите «ОК».
Шаг 9: Теперь вы можете начать работать с SQLite в вашем проекте, используя класс «Database.cs». Добавьте необходимые методы и функции для работы с базой данных.
Поздравляю! Вы успешно создали новый проект в Visual Studio C# и подключили библиотеку SQLite для работы с базой данных.
Установка NuGet-пакета для работы с SQLite
Шаги для установки NuGet-пакета для работы с SQLite в Visual Studio C#:
- Откройте проект в Visual Studio C#.
- Щелкните правой кнопкой мыши по названию проекта в окне «Solution Explorer».
- Выберите пункт меню «Manage NuGet Packages».
- В открывшемся окне «NuGet Package Manager» выберите вкладку «Browse».
- Введите в поле поиска «System.Data.SQLite.Core».
- Найдите пакет «System.Data.SQLite.Core» и выберите его.
- Нажмите кнопку «Install» рядом с пакетом.
- Подтвердите установку пакета, нажав кнопку «OK».
После установки NuGet-пакета для работы с SQLite, вы будете готовы использовать его функциональность в вашем проекте в Visual Studio C#.