System data sqlite что это
В некоторых проектах достаточно часто возникает необходимость в хранении данных, объем которых уже нельзя назвать маленьким, но в тоже время использовать какую-либо СУБД слишком накладно из-за сложности развертывания приложения. И тут на помощь приходит такая прекрасная вещь как SQLite – компактная встраиваемая база данных.
С чего начать
Если вы используете среду разработки Visual Studio (в частности версию 2008), то вам может так же пригодиться SQLite Designer, который дает возможность использовать визуальные средства для работы с базами SQLite: построитель запросов (Query Builder), редактирование таблиц и ряд других возможностей.
Ну и в дополнение ко всему в поставку библиотеки провайдера входит сборка System.Data.SQLite.Linq.dll, которая обеспечивает доступ к технологии LINQ.
Создание базы данных SQLite
Создавать базу данных SQLite можно как программным способом, так и используя Server Explorer, который доступен в Visual Studio. Рассмотрим программный способ создание базы данных с использованием провайдера ADO.NET. В качестве самого простого примера я создам базу и одну таблицу, в которой будет хранятся данные о рабочих абстрактной фирмы.
Создание базы и таблицы средствами ADO.NET:
using System;
using System.IO;
using System.Data;
using System.Data.Common;
using System.Data.SQLite;
class Program
<
static void Main( string [] args)
<
string baseName = «CompanyWorkers.db3» ;
SQLiteFactory factory = (SQLiteFactory)DbProviderFactories.GetFactory( «System.Data.SQLite» );
using (SQLiteConnection connection = (SQLiteConnection)factory.CreateConnection())
<
connection.ConnectionString = «Data Source = » + baseName;
connection.Open();
В этом примере используются классы SQLiteFactory, SQLiteConnection, SQLiteCommand, которые обеспечивают создание файла базы, подключение к источнику данных и выполнение SQL запросов. Эти классы и реализуют поддержку интерфейсов ADO.NET посредствам наследования базовых абстрактных классов ADO.NET, это можно увидеть, если посмотреть на их прототипы в Object Browser. Вот некоторые из них:
public sealed class SQLiteFactory : DbProviderFactory, IServiceProvider
public sealed class SQLiteConnection : DbConnection, ICloneable
Так, класс SQLiteFactory реализует функционал DbProviderFactory, а SQLiteConnection – DbConnection. Классы DbProviderFactory и DbConnection являются частью стандартных абстрактных классов ADO.NET, интерфейсы которых обеспечивают унифицированный доступ к данным вне зависимости от используемой СУБД.
Убедиться в том, что база в действительности была создана можно с помощью уже упомянутого Server Explorer, просто создав соединение к файлу базы:
Рис. 1. Просмотр базы данных CompanyWorkers через Server Explorer
В целом провайдер для SQLite реализует весь функционал, который необходим для работы с базами как на связанном, так и несвязанном уровнях ADO.NET.
Редактирование базы данных SQLite
Редактирования базы данных рассмотрим на примере простейшего приложения Web Forms. В целом, работа с SQLite в данном случае мало отличается от работы с другой СУБД, в силу использования интерфейса ADO.NET.
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using DataEditor.CompanyWorkersTableAdaptersTableAdapters;
protected void DetailsView1_ItemDeleted( object sender, DetailsViewDeletedEventArgs e)
<
GridViewDataBind();
>
protected void DetailsView1_ItemUpdated( object sender, DetailsViewUpdatedEventArgs e)
<
GridViewDataBind();
>
protected void DetailsView1_ItemInserted( object sender, DetailsViewInsertedEventArgs e)
<
GridViewDataBind();
>
>
>
Теперь приложение полностью готово к использованию. Окончательный вид редактора для редактирование таблицы workers из базы CompanyWorkers.db3:
Рис. 5. Редактор, готовый к работе.
Благодаря использованию SQLite мне не понадобилось разворачивать каких-либо служб для работы с базой.
Заключение
Думаю, возможностей SQLite должно хватить для достаточного обширного круга задач. В тоже время не стоит пытаться использовать её в каких-либо серьёзных проектах с очень большими объёмами данных и большим количеством пользователей, так как данная СУБД для этого не предназначена: в ней отсутствует поддержка многопроцессорности и ограничены уровни изоляций для транзакций. В общем, для средних проектов, типа базы данных небольшой компании или телефонного справочника, самое подходящее средство.
Работа с SQLite в C# (.NET 5)
С SQLite более менее детально я знакомился ещё при работе в Delphi. И, думаю, что не стоит сильно углубляться в рассмотрение всех преимуществ этой компактной встраиваемой СУБД. В этой статье я постараюсь рассмотреть основные моменты работы с SQLite в C# (.NET 5), которые позволят нам, в дальнейшем, более детально разобраться с использованием СУБД SQLite в своих проектах на C#. Для того, чтобы не отвлекаться на моменты работы с графическим интерфейсом, напишем небольшую консольную программку, использующую SQLite.
После того, как Visual Studio создаст новый проект, необходимо зайти в свойства проекта и выбрать платформу .NET 5:
Установка необходимых пакетов
Для того, чтобы иметь возможность работать с БД SQLite в C# нам потребуется пакет System.Data.SQLite. Чтобы его установить, достаточно воспользоваться менеджером пакетов NuGet. Выбираем в контекстном меню проекта «Управление пакетами NuGet…»
в строке поиска набираем «SQLite» и ищем пакет System.Data.SQLite.
После нажатия кнопки «Установить» Visual Studio внесет изменения в решение и установит также дополнительные пакеты:
После окончательной установки всех необходимых пакетов, вид вашего проекта в обозревателе решений должен быть вот таким:
Теперь можно начинать работу с SQLite в C# (.NET 5).
Подключение к БД SQLite в C#
Добавим в наш проект пространство имен System.Data.SQLite и напишем следующий метод подключения к базе данных:
Создание таблиц БД SQLite в C#
Создадим новую таблицу в наше базе данных. Для этого, допишем код метода Main() следующим образом:
Запись данных в БД SQLite в C#
Добавление записей в SQLite
Добавим одну запись в таблицу базы данных SQLite, используя все тот же объект типа SQLiteCommand :
В приведенном выше примере мы использовали в качестве запроса обычную строку с заранее известными параметрами запроса. Однако, удобнее использовать для добавления новых записей в БД SQLite запрос с параметрами. Сделать это можно, например, следующим образом:
Использование транзакций SQLite
Одной из претензий, которую предъявляли (и, иногда, продолжают предъявлять) новички в работе с SQLite к этой замечательной базе данных является то, что, по мнению новичков, запись в эту базу данных происходит очень медленно. Действительно, посмотрим на вот такой код:
Здесь мы пробуем записать в базу SQLite 1000 записей и, при этом, засекаем время выполнения операции. Вот, что покажет нам счётчик времени выполнения операции:
Тринадцать секунд на добавление 1000 записей в базу данных — это достаточно много. Ускорить время выполнения операции добавления записей SQLite на порядок позволяет использование транзакций. Перепишем наш код следующим образом:
и посмотрим, что покажет счётчик времени выполнения операции:
Как видите, выполнение транзакции в SQLite позволило сократить время выполнения операции более, чем на 99%.
Чтение данных из БД SQLite в C#
Для того, чтобы понять как происходит чтение данных из таблиц БД SQLite в C# мы можем воспользоваться следующим простым примером:
Объект типа DataTable представляет собой таблицу данных в памяти. В этой таблице (как и в любой другой таблице) все данные хранятся в виде столбцов и строк, где каждая строка — это отдельная запись таблицы БД. В свою очередь объект типа SQLiteDataAdapter предоставляет нам набор команд и методов для работы с наборами данных.
ИТОГО
Сегодня мы научились выполнять основные операции для работы с базой данный SQLite: создавать соединение с базой данных, создавать новые таблицы, заполнять таблицы данными и считывать данные из таблиц баз данных SQLite. Для того, чтобы запись данных происходила быстрее, мы использовали транзакции, которые позволили ускорить запись в таблицу SQLite более чем на 99%.
SQLite + C#
В данной статье рассмотрим работу с SQLite из программы на языке C#. Основное внимание будет уделено конфигурированию проекта в MS Visual Studio для работы с SQLite, созданию базы данных, созданию таблиц и работе с таблицами: чтение/запись данных.
Исходный код доступен на GitHub.
Введение в SQLite
Если кратко, то SQLite – это кроссплатформенная встраиваемая СУБД. Свойство кроссплатформенности я думаю пояснять не нужно, а вот с понятием “встраиваемая” наверное стоит немного разобраться. Существуют СУБД, которые представляют собой клиент-серверное приложение – это наиболее знакомый вариант. Например Microsoft SQL Server, MySQL, PostgreSQL, различные NoSQL варианты, которых на сегодняшний день появилось огромное количество. Суть их в том, что есть выделенное приложение – сервер, которое принимает запросы от клиентов и выполняет их, оно непосредственно занимается записью/чтением данных на диск и предоставляет различные функции типа репликации и т.п. Встраиваемая СУБД не имеет выделенного сервера, ее движок включается в приложение в виде библиотеки и предоставляет доступ к базе через специализированный API.
На сегодняшний день SQLite является одной из самых популярных решений такого типа. Она используется практически повсеместно: в embedded приложениях, мобильных телефонах, различных платформах и т.д. Например браузер Google Chrome использует SQLite для хранения Cookies. SQLite обладает феноменальной надежностью (зачастую в ущерб производительности, если её неправильно “готовить”), поэтому, несмотря на то, что она является открытой, разработчики практически не принимают сообщения об ошибках.
Сами разработчики рекомендуют брать во внимание следующие моменты при выборе дистрибутива SQLite:
Структура папки, в которой располагается приложение, для поддержки режима автоматической подгрузки нужных библиотек (Native Library Pre-Loading) представлена ниже
Работа с SQLite из C#
Создадим простое приложение, демонстрирующее работу с SQLite СУБД. В качестве среды разработки будем использовать Visual Studio 2015 Community Edition.
Подготовка
Первое, что мы сделаем, это скачаем с официального сайта пакеты Precompiled Binaries for 64-bit Windows (.NET Framework 4.0) и Precompiled Binaries for 32-bit Windows (.NET Framework 4.0). На момент написания статьи это была версия sqlite-netFx40-binary-x64-2010-1.0.101.0.zip и sqlite-netFx40-binary-Win32-2010-1.0.101.0.zip
В Visual Studio создадим проект Windows Forms Application с именем SQLiteSample.
После этого необходимо собрать проект, для того, чтобы IDE создала необходимый набор каталогов. В нашем случае интерес представляет \bin\Debug. В него добавим необходимый набор файлов, как показано выше в описании структуры папок при использовании подхода Native Library Pre-Loading.
Добавим в проект ссылку на библиотеку System.Data.SQLite.dll, предварительно скопировав ее в папку SQLiteSample\SQLiteSample\lib. Для этого на панели меню выбрать Project/Add Reference… В открывшемся окне нажать кнопку Browse… и выбрать файл System.Data.SQLite.dll. Что привет к появлению нового Reference в окне Solution Explorer.
Приложение будет представлять собой форму для работы с базой данных, содержащей имена писателей и названия их произведений. Внешний вид представлен на рисунке ниже.
На панели инструментов имеются несколько кнопок:
В строке состояния отображается статус:
Создание базы данных, таблиц и работа с данными
Сейчас более подробно рассмотрим процессы создания базы данных, таблиц и работы с записями таблицы (чтение и добавление). Каждая из этих задач будет решаться в рамках метода, вызываемого при нажатии на соответствующую кнопку.
Предварительно подключим в нашем проекте пространство имен System.Data.SQLite и добавим переменные для связи с базой данных. Таким образом наша программа будет иметь вид.
Создание БД и таблицы
Создание БД и таблицы в “SQLite Sample”, если они ещё не созданы, осуществляется при нажатии на кнопку Create.
В данном методе, мы сначала проверяем, существует ли файл с именем “sample.sqlite” (переменная dbFileName), если его нет, то создаем. Этот файл фактически и является базой данных.
После этого мы подключаемся к созданной БД:
Для выполнения SQL команд будем использовать переменную m_sqlCmd, чтобы это стало возможным в первую очередь зададим объект класса SqlConnection, используемый SQLiteCommand:
После выполним запрос на создание таблицы:
Подключение к уже существующей таблице
Подключение к уже существующей таблице осуществляется при нажатии на кнопку Connect. Код метода очень похож на тот, что мы разбирали выше, поэтому на нем мы останавливаться не будем.
Чтение данных
Чтение данных осуществляется при нажатии на кнопку Read all, при этом из существующей БД считываются все данные и выводятся в таблицу.
Разберем этот метод более подробно. Первое, что необходимо сделать, это проверить наличие связи с БД:
Данные, считанные из базы, мы будем помещать в таблицу DataTable, а из неё будем из перегружать в элемент DataGridView, расположенный на нашей форме. Для этого создадим SQL запрос и адаптер, который будет выполнять запрос и передавать полученные от СУБД данные в таблицу
Если таблица не пуста, перенесем данные из нее в элемент dgvViewer.
Добавление данных в БД
Добавление данных в БД осуществляется при нажатии на кнопку Add. При этом будет вызван соответствующий метод.
В нем мы также, вначале проверяем, есть ли связь с БД, после этого создает диалоговое окно для ввода имени автора и названия произведения.
Если окно было закрыто по кнопку OK, то записываем введенные данные в БД
На этом можно завершить описание базовых понятий и методов работы с СУБД SQLite.
Спасибо за внимание!
SQLite + C# : 13 комментариев
Например Microsoft SQL Server, MySQL, PostgreSQL, различные NoSQL варианты, который на сегодняшний день появилось огромное количество.
которых – поправьте, пожалуйста
Привет, у тебя нет проблем с поиском кириллических символов в базе? У меня почему-то совсем не ищет
Добрый день! Нет, с такой проблемой не сталкивался. Попробую посмотреть, если что-то найду интересное – напишу.
Здравствуйте. У меня компилятор ругается на то, что не находит пространство имен для AddDataToDb…Что делать?
Вы скачали проект с GitHub(https://github.com/devpractice-repo/SQLiteAndCSharp)? Если да, то должно быть все нормально, если собираете сами, то вам нужно создать соответствующую форму.
P.S.
Лучше возьми пример с GitHub)))
Если что-то не будет работать, отправляйте свой проект на devpractice.mail@gmail.com мы посмотрим.
Здравствуйте. Вот такая ошибка выскакивает при запуске проекта https://i.imgur.com/mPPCeHi.png
Что я делаю не так?
Просто скачал проект с гитхаба и пробую запустить.
Добрый день!
Проверьте, что у вас скачены и установлены все необходимые файлы для работы с SQLite, для этого прочитайте ещё раз раздел (Введение в SQLite) и (Работа с SQLite из C# / Подготовка). Подсказка: в папке bin/Debug у вас должен быть следующий набор файлов:
SQLiteSample.exe
SQLiteSample.exe.config
SQLiteSample.pdb
System.Data.SQLite.dll
System.Data.SQLite.EF6.dll
System.Data.SQLite.Linq.dll
x64/SQLite.Interop.dll
x86/SQLite.Interop.dll
Файлы SQLite.Interop.dll нужно взять вот отсюда http://system.data.sqlite.org/downloads/1.0.109.0/sqlite-netFx40-binary-x64-2010-1.0.109.0.zip и от сюда http://system.data.sqlite.org/downloads/1.0.109.0/sqlite-netFx40-binary-Win32-2010-1.0.109.0.zip
Нужно установить Microsoft Visual C++ 2010
Не ясно как определить lbStatusText.Text. Явно в проекте lbStatusText.Text не определена, а других пояснений нет.
Вот скажите человек пытается разобраться БД, а вы еще ему тему со StatusStrip подбрасываете. В вашем примере lbStatusText.Text не определена. Нужно лезть подключать StatusStrip. А это совсем другая опера. Нельзя ли сделать этот пример без StatusStrip?
Полезная статья, однако, не раскрыта тема команды Update. Т.е изменение данных в таблице формы, и перенос этих изменений в базу.
Здравствуйте.
Подскажите пожалуйста, как мне прочитать данные из ячейки, находящейся в определённом столбце?
К примеру, есть таблица из 4 столбцов: title, discription, date, sirial
Допустим мне нужно прочитать данные из 6-ой строки столбца description
Скажите пожалуйста, как правильно сформировать запрос к базе и вывести результат например в MessageBox?
Большое спасибо
SQLite в WPF
Работа с SQLite
SQLite является одной из наиболее используемых систем управления базами данных. Главным преимуществом SQLite является то, что для базы данных не нужно сервера. База данных представляет собой обычный локальный файл, который мы можем перемещать вместе с главным файлом приложения. Кроме того, для запросов к базе данных мы можем использовать стандартные выражения языка SQL, которые равным образом с некоторыми изменениями могут применяться и в других СУБД как Oracle, MS SQL Server, MySQL, Postgres и т.д.
Итак, создадим новый проект WPF, который назовем SQLiteApp. В первую очередь нам надо добавить функциональность SQLite в проект. Для этого мы можем загрузить нужный нам пакет со страницы https://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki, и инсталлятор установить все необходимые библиотеки в глобальный кэш сборок (GAC), откуда мы можем выбирать их для проекта.
Либо мы можем добавить SQLite в проект через пакетный менеджер Nuget. Итак, выберем этот способ, перейдем к Nuget, нажав в проекте правой кнопкой на узел References и выбрав в открывшемся контекстном меню пункт Manage NuGet Packages. :
В окне менеджера Nuget введем в окно поиска «SQLite», и менеджер отобразит нам ряд результатов. Из них нам надо установить пакет под названием System.Data.SqlClient :
Данный пакет зависит от трех других пакетов, которые также будут установлены:
Вместе с последним пакетом также будет добавлен Entity Framework. Таким образом, мы сможем работать с базой данных SQLite через ORM-инструмент Entity Framework.
В отличие от работы с MS SQL Server по отношению к SQLite EF 6 не поддерживает автоматическое создание базы данных и ее таблиц через Code First в соответствии со структурой моделей приложения. И в этом случае нам самим надо создавать баз данных и ее таблицы.
Далее нам будет предложено добавить в базу данных таблицы. Определим для таблицы имя «Phones» и добавим четыре столбца Id, Title, Company, Price, как на скриншоте:
Стоит обратить внимание, что столбец Id определен здесь как первичный ключ.
После добавления таблицы мы сможем добавить вручную через DB Browser for SQLite какие-либо данные.
И далее добавим созданную нами базу данных в наш проект. После добавления для файла базы данных установим опцию «Copy if newer», чтобы файл копировался при компиляции в каталог приложения:
Прежде всего здесь определена строка подключения:
Так как созданный нами файл базы данных называется mobiles (к которому DB Browser for SQLite по умолчанию добавляет расширение db ), то в качестве источника данных здесь указан именно «mobiles.db».
провайдера, который будет использоваться для подключения:
Теперь определим в проекте класс, объекты которого будут храниться в базе данных:
При ручном определении модели надо учитывать, что эта модель должна соответствовать таблице из БД. Так, в бд мы создали таблицу Phones, в которой есть целочисленные столбцы Id и Price, соответственно в классе Phone определены свойства Id и Price, представляющие целые числа. То же самое со строковыми столбцами Title и Company, которые по имени и типу данных соответствуют свойствам Title и Company в классе Phone.
И еще один важный момент: Entity Framework по умолчанию применяет некоторые условности при наименовании моделей и таблиц в БД. Так, название таблицы должно представлять название модели во множественном числе в соответствии с правилами английского языка. Так, у нас таблица называется Phones, а класс Phone. То есть условности соблюдены.
Класс контекста должен наследоваться от DbContext. В конструкторе класса в конструктор базового класса передаем название подключения. В данном случае название должно совпадать с названием подключения из App.config.
Теперь все готово для работы с базой данных. Стандартный набор операций по работе с БД включает получение объектов, добавление, изменение и удаление. Для получения и просмотра списка объектов из бд мы будем использовать главное окно. А для добавления и изменения создадим новое окно.
В коде xaml у страницы PhoneWindow.xaml определим следующее содержимое:
Здесь определены три поля ввода для каждого свойства модели Phone и две кнопки для сохранения и отмены.
В коде PhoneWindow.xaml.cs определим контекст для этой страницы:
Данное окно будет диалоговым. Через конструктор оно будет получать объект Phone, который устанавливается в качестве контекста данных.
В коде xaml у главного окна MainWindow определим вывод списка телефонов и набор кнопок для управления этим списком:
В коде C# у этого окна пропишем обработчики кнопок, через которые будем взаимодействовать с базой данных SQLite:
Выражение db.Phones.Load() загружает данные из таблицы Phones в локальный кэш контекста данных. И затем список загруженных объектов устанавливается в качестве контекста данных:
Для добавления вызывается метод Add:
При изменении мы передаем в PhoneWindow копию выбранного объекта. Если мы передавали бы сам выделенный объект, то все изменения на форме автоматически синхронизировались со списком, и не было бы смысла в кнопке отмены.
После получения измененного объекта мы находим его в базе данных и устанавливаем у него состояние Modified, после чего сохраняем все изменения:
Запустим приложение. И добавим какой нибудь объект:
И после добавления объект отобразится в списке:
Как работать с SQLite в C#
Один из читателей моего сайта попросил в комментариях к статье «Как сохранять изображения в базу данных MS SQL и извлекать изображения из базы данных» написать статью по работе с SQLite. Отдохнув в отпуске и написав несколько статей по другой тематике решил написать статью и по работе с SQLite в C#.
Рассмотрим основные методы работы с базой данных SQLite: SELECT, CREATE, INSERT, UPDATE, DELETE. Чтобы материал не был обыденным мы рассмотрим добавление изображений и файлов в базу данных SQLite, а также их чтение из базы данных.
Сразу хочу сказать, что синтаксис похож на запросы MS SQL, а также подключение к базе данных происходит аналогично. Поэтому если вы работаете в C# с базами MS SQL, то вы прямо сейчас уже сможете самостоятельно работать с SQLite немного изменив свои запросы в коде.
Для работы с SQLite нам необходимо к проекту подключить пять NuGet пакетов, которые показаны на картинке:
Однако достаточно подключить один пакет, который выделен на картинке, и остальные пакеты подтянутся и установятся автоматически.
Прописываем для работы с SQLite:
Дополнительно к проекту подключаем:
Далее по тексту будет код без методов, который вы прописываете у себя в нужных вам методах.
Создание базы данных SQLite
Создание таблицы в базе данных SQLite
Создадим таблицу, с которой будем в дальнейшем работать.
Добавление изображения в базу данных SQLite
Извлечение изображения из базы данных SQLite
Добавление любого файла в базу данных SQLite
Извлечение файла из базы данных SQLite
Комментариев в коде в начале будет минимум, так как здесь код аналогичный коду извлечения изображения из базы данных, а вот вторая часть кода отличается.
С помощью кода добавления и извлечения файла можно писать и считывать из базы данных любые файлы включая изображения.
Обновление записи в базе данных SQLite
Удаление записи в базе данных SQLite
Заключение
Как видим есть похожий код (DELETE и UPDATE), а есть отличающийся (SELECT сравните с другими).
На этом всё. На основании приведённых примеров вы сможете освоить работу с SQLite в C#.
Прикладываю проект с программой, которая может производить все описанные выше операции.