sqlite + visual studio 2017
Проще всего — для начала — возьмите amalgamation, тогда вам будет достаточно подключить к своему проекту sqlite3.c , и добавить #include «sqlite3.h» .
Отслеживать
ответ дан 4 дек 2017 в 19:38
218k 15 15 золотых знаков 117 117 серебряных знаков 229 229 бронзовых знаков
Необходимые NuGet-пакеты для работы с SQLite
- System.Data.SQLite
- System.Data.SQLite.Core
- System.Data.SQLite.EF6
- System.Data.SQLite.Linq
Пример
string connectionString = @"Data Source = C:\. \test.db"; using (SQLiteConnection conn = new SQLiteConnection(connectionString)) < conn.Open(); string sql = "SELECT name FROM users"; Listnames = new List(); using (SQLiteCommand cmd = new SQLiteCommand(sql, conn)) using (SQLiteDataReader reader = cmd.ExecuteReader()) < while (reader.Read()) < names.Add(reader["name"].ToString()); >> >
#5 – Создание базы данных SQLite
Начиная с этого урока мы приступаем к работе над базой данных. В качестве СУБД мы будем использовать SQLite. За урок мы создадим базу данных, добавим в неё таблицу и подключим БД к нашему WPF проекту.
Видеоурок
Полезная ссылка:
База данных SQLite
Работа с БД SQLite относительно проста в сравнении с другими СУБД по типу MySQL, PostgreSQL, Firebase и тому подобные. Простота обеспечивается за счет того, что SQLite встраивается внутрь вашего проекта. Это значит, что для нее не требуется отдельный сервер или хостинг и она всегда будет поставляться пользователю вместе с приложением.
Подключение SQLite
Для работы с SQLite вам требуется скачать и установить специальную программу к себе на компьютер, а также внутрь проекта добавить библиотеку «System.Data.SQLite». После добавления библиотеки необходимо описать изменения в файле «App.config».
В скачанной программе создайте новую БД, добавьте в неё таблицу (или таблицы) и далее файл базы данных закиньте в папку вашего WPF проекта.
Начало работы с 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 в .NET приложениях
В некоторых проектах достаточно часто возникает необходимость в хранении данных, объем которых уже нельзя назвать маленьким, но в тоже время использовать какую-либо СУБД слишком накладно из-за сложности развертывания приложения. И тут на помощь приходит такая прекрасная вещь как SQLite – компактная встраиваемая база данных.
Для тех, кто пишет с использованием платформы .NET приятным моментом станет наличие готового ADO.NET провайдера для работы с SQLite, который можно загрузить с сайта: http://sqlite.phxsoftware.com/. Данный провайдер так же позволяет задействовать все дополнительные возможности последних версий .NET, такие как LINQ, Entity Framework.
С чего начать
- Managed Only – оптимальный вариант, для тех, кто создает приложения, которые должны работать как в Windows, так и в Linux-based операционных системах. В данном случае сборка включает в себя только управляемый код провайдера, а в зависимости от ОС понадобиться родная версия библиотеки SQLite (например: sqlite3.dll в Windows), которые можно взять с http://www.sqlite.org.
- Compact Framework – версия для работы в среде .NET CF для мобильных устройств под управлением Windows CE. Включает в себя wrapper для неуправляемой библиотеки SQLite и реализации необходимых интерфейсов ADO.NET. Сама неуправляемая библиотека движка SQLite для Windows CE расположена там же, где и сборка System.Data.SQLite.dll – это файл SQLite.Interop.060.DLL.
- Itanium – версия адаптера для работы на процессорах Intel Itanium. В этом случае для работы приложения достаточно только сборки System.Data.SQLite.dll, в которой уже содержится неуправляемый код движка SQLite.
- x64 – версия для платформ с архитектурой x64. Так же содержит управляемую и неуправляемую части в одной сборке.
- x86 – версия для платформ с архитектурой x86. Устроена так же как x64 и Itanium версии и не требует каких-либо неуправляемых версии библиотеки движка 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 #0000ff»>using (SQLiteCommand command = new SQLiteCommand(connection))
command.CommandText = @»CREATE TABLE [workers] (
[id] integer PRIMARY KEY AUTOINCREMENT NOT NULL,
[name] char(100) NOT NULL,
[family] char(100) NOT NULL,
[age] int NOT NULL,
[profession] char(100) NOT NULL
);» ;
command.CommandType = CommandType.Text;
command.ExecuteNonQuery();
>
>
>
>
* This source code was highlighted with Source Code Highlighter .
В этом примере используются классы 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.
Я создам простейшую страницу ASP.NET в которой используются контролы GridView, DetailsView и два объекта SqlDataSource, которые обеспечивают доступ к базе данных CompanyWorkers.db3. Далее я привожу лишь наиболее важные моменты, которые необходимы для функционирования приложения.
- Настроим превый объект SqlDataSource1. В редакторе он используется лишь как источник данных для объекта GridView1, поэтому при настройке подключения к базе достаточно будет указать, что необходимо только извлекать данные из CompanyWorkers.db3, это легко сделать в окне настроек SqlDataSource1:
Рис. 2. Выбираем все колонки в таблице workers.
- После настройки SqlDataSource1 необходимо добавить в форму объект класса GridView, что делается простым перетаксиванием контрола из Toolbox’а на apsx-страницу. Для получившегося объекта GridView1 выбираем источник данных SqlDataSource1. В настройках GridView1 включаем опцию Enable Selection, которая понадобится при редактировании нужной строки.
- Следующим добавляем в форму элемент класса DetailsView и еще один объект класса SqlDataSource. Элемент DetailsView1 будет основным редактором данных таблицы workers. Предварительно настроим SqlDataSource2 на выбор нужной записи из таблицы для DetailsView1 при нажатии Select напротив интересующего работника в GridView1. Для этого в настройках источника данных заходим в WHERE и указываем, как осуществляется выбор текущего элемента для DetailsView1:
Рис. 3. Ассоциируем выбор записи из таблицы со значением SelectedValue элемента DataGrid1.
- Возвращаемся к предыдущему окну и в Advanced ставим галку для генерации запросов на вставку, обновление и удаление записей в таблице:
Рис. 4. Создаем запросы на вставку, обновление и удаление записей.
- Устанавливаем SqlDataSource2 в качестве источника данных для DetailsView1. В целом приложение уже готово, но при работе с ним можно заметить, что при добавлении и удалении сотрудников с помощью DetailsView1 в DataGrid1 данные не обновляются, чтобы это исправить необходимо добавить обработчики в DetailsView1 для событий ItemDeleted, ItemUpdated и ItemIserted, в которых связываем DataGrid1 с обновившимися данными:
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;
namespace DataEditor
public partial class _Default : System.Web.UI. Page
private void GridViewDataBind()
//Обновляем данные в GridView1
this .GridView1.DataBind();
>
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 должно хватить для достаточного обширного круга задач. В тоже время не стоит пытаться использовать её в каких-либо серьёзных проектах с очень большими объёмами данных и большим количеством пользователей, так как данная СУБД для этого не предназначена: в ней отсутствует поддержка многопроцессорности и ограничены уровни изоляций для транзакций. В общем, для средних проектов, типа базы данных небольшой компании или телефонного справочника, самое подходящее средство.
P.S.: В своих примерах я использовал x86-версию сборки System.Data.SQLite.dll.