вторник, 4 августа 2009 г.

SQLite в .NET

Однажды понадобилось мне создать программку-мигратор базы данных из текстового XML в SQLite для проекта vanac. Дело в том, что XML меня перестал устраивать ввиду своих очень жадных потребностей в смысле места. К тому же, XML на лету было не так-то легко менять. Требовалась динамичность изменения данных.

Таким образом, для локального проекта наиболее оптимальным решением было выбрать базу данных SQLite.

Искать в Интернете информацию долго не пришлось. Сразу же натолкнулся на движок, разработанный специально для такого случая:
http://sqlite.phxsoftware.com/

Скачав и установив его, я открыл 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.

Комментариев нет:

Отправить комментарий