SQLite в C# и .NET

Подключение к базе данных SQLite

Последнее обновление: 02.03.2021

SQLite является одной из наиболее популярных СУБД. К ее преимуществам можно отнести портативность и мобильность. Для работы с базой данной SQLite не требуется наличие сервера, как в случае с MS SQL Server. И .NET предоставляет возможности для работы с SQLite в рамках приложения на языке C#.

Прежде всего для работы SQLite в C# необходимо установить через Nuget пакет Microsoft.Data.Sqlite:

Microsoft.Data.Sqlite и SQLite в C# и .NET

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 они будут выполняться синхронно.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850