SQLite в .NET
Однажды понадобилось мне создать программку-мигратор базы данных из текстового XML в SQLite для проекта vanac. Дело в том, что XML меня перестал устраивать ввиду своих очень жадных потребностей в смысле места. К тому же, XML на лету было не так-то легко менять. Требовалась динамичность изменения данных.
Таким образом, для локального проекта наиболее оптимальным решением было выбрать базу данных SQLite.
Искать в Интернете информацию долго не пришлось. Сразу же натолкнулся на движок, разработанный специально для такого случая.
Скачав и установив его, я открыл Visual Studio и обнаружил в списке возможных для добавления References: System.Data.SQLite
. Для тех, кто не знает, как добавлять зависимости для приложений приведу парочку скриншотов.
Давим в Solution Explorer правой кнопкой.
Затем выбираем в списке System.Data.SQLite
и давим OK.
Зависимость добавлена.
Вот три основные функции, которые обеспечат вам понимание принципов работы с пространством имен System.Data.SQLite
.
GetDataTable(string sql)
выполняет запрос sql и возвращает результат его выполнения в структуре данныхDataTable
.ExecuteNonQuery(string sql)
используется в основном, когда необходимо выполнить операцию над данными (например,UPDATE
илиINSERT INTO
). Возвращаемое значение – количество измененных / добавленных рядов данных.ExecuteScalar(string sql)
используется, когда ожидается получить одно единственное значение (например, количество юзеров в таблицеusers
).
public static DataTable GetDataTable(string sql) {
SQLiteConnection sqliteConnection = new SQLiteConnection("Data Source=Base.db");
sqliteConnection.Open();
SQLiteCommand sqliteCommand = new SQLiteCommand(sqliteConnection);
DataTable dt = new DataTable();
try {
sqliteCommand.CommandText = sql;
SQLiteDataReader sqliteReader = sqliteCommand.ExecuteReader();
dt.Load(sqliteReader);
sqliteReader.Close();
} catch {
// Закрывать соединение нужно в любом случае
sqliteConnection.Close();
}
sqliteConnection.Close();
return dt;
}
public static int ExecuteNonQuery(string sql) {
SQLiteConnection sqliteConnection = new SQLiteConnection("Data Source=Base.db");
sqliteConnection.Open();
SQLiteCommand sqliteCommand = new SQLiteCommand(sqliteConnection);
sqliteCommand.CommandText = sql;
int rowsUpdated = sqliteCommand.ExecuteNonQuery();
sqliteConnection.Close();
return rowsUpdated;
}
public static string ExecuteScalar(string sql) {
SQLiteConnection sqliteConnection = new SQLiteConnection("Data Source=Base.db");
sqliteConnection.Open();
SQLiteCommand sqliteCommand = new SQLiteCommand(sqliteConnection);
sqliteCommand.CommandText = sql;
object value = sqliteCommand.ExecuteScalar();
sqliteConnection.Close();
if (value != null) {
return value.ToString();
}
return "";
}
Если при использовании SQLite у вас возникла проблема с кодировкой русских символов, попробуйте в базе использовать тип данных NVARCHAR
вместо VARCHAR
.