Начало работы с 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)
            {
                MessageBox.Show("Ошибка: " + ex.Message);
            }
Запустив программу и попробовав выполнить данный код, мы столкнемся с ошибкой:



Не удается загрузить 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, си шарп, базы данных




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Java и реестр Windows
Урок 39. Область действия блока JS
Начало работы с API от AmoCRM на PHP