SQLite является одной из наиболее популярных СУБД. К ее преимуществам можно отнести портативность и мобильность. Для работы с базой данной SQLite не требуется наличие сервера, как в случае с MS SQL Server. И .NET предоставляет возможности для работы с SQLite в рамках приложения на языке C#.
Прежде всего для работы SQLite в C# необходимо установить через Nuget пакет Microsoft.Data.Sqlite:
Для создания подключения к бд SQLite применяется класс SqliteConnection:
Он имеет два конструктора:
SqliteConnection() SqliteConnection(String)
Второй конструктор в качестве параметра принимает строку подключения.
Строка подключения представляет набор параметров в виде пар ключ=значение
, которые отделяются друг от
друга точкой с запятой. Рассмотрим, какие параметры может принимать строка подключения для SQLite.
Указывает на путь к файлу базы данных. В качестве альтернативы можно использовать параметры DataSource (без пробела) и Filename. При этом можно определять абсолютные и относительные пути. Относительные пути рассматриваются относительно папки приложения.
Если этот параметр не указан, то SQLite создает временную базу данных на диске, которая удаляется при закрытии подключения.
Устанавливает режим подключения и может принимать следующие значения:
ReadWriteCreate
: открывает базу данных для чтения и записи. Если база данных не существует,
то она автоматически создается. Это режим применяется по умолчанию.
ReadWrite
: открывает базу данных для чтения и записи.
ReadOnly
: открывает базу данных только для чтения.
Memory
: создает и открывает базу данных в памяти.
Устанавливает режим кэширования. Может принимать следующие значения:
Default
: применяет режим по умолчанию используемой библиотеки SQLite. Этот режим применяется по умолчанию.
Private
: для каждого подключения создается свой приватный кэш.
Shared
: подключения используют один общий кэш.
Устанавливает ключ шифрования. Если данный параметр установлен, то сразу после открытия подключения базе данных посылается команду
PRAGMA key
с ключом шифрования.
Указывает, будет ли база данных поддерживать внешние ключи. Может принимать следующие значения:
True
: сразу после открытия подключения посылает команду PRAGMA foreign_keys = 1
False
: сразу после открытия подключения посылает команду PRAGMA foreign_keys = 0
Если параметр не применяется, то по умолчанию ничего - никаких команд PRAGMA foreign_keys
не посылается.
Указывает, будут ли поддерживаться рекурсивные триггеры. Может принимать два значения:
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 они будут выполняться синхронно.