Поиск…


Создание простого CRUD с использованием SQLite в C #

Прежде всего нам нужно добавить поддержку SQLite в наше приложение. Есть два способа сделать это

  • Загрузите DLL, подходящую для вашей системы, на странице загрузки SQLite, а затем добавьте в проект вручную
  • Добавить зависимость от SQLite через NuGet

Мы сделаем это вторым способом

Сначала откройте меню NuGet

введите описание изображения здесь

и найдите System.Data.SQLite , выберите его и нажмите Установить.

введите описание изображения здесь

Установка также может быть выполнена из консоли диспетчера пакетов с

PM> Install-Package System.Data.SQLite

Или только для основных функций

PM> Install-Package System.Data.SQLite.Core 

Это все для загрузки, поэтому мы можем перейти прямо к кодированию.

Сначала создайте простую базу данных SQLite с этой таблицей и добавьте ее как файл в проект

CREATE TABLE User(
  Id INTEGER PRIMARY KEY AUTOINCREMENT,
  FirstName TEXT NOT NULL,
  LastName TEXT NOT NULL
);

Также не забудьте установить для параметра « Копировать в каталог вывода» файл « Копировать», если новый экземпляр « Копировать» всегда , исходя из ваших потребностей

введите описание изображения здесь

Создайте класс User, который будет базовым объектом для нашей базы данных.

private class User
{
    public string FirstName { get; set; }
    public string Lastname { get; set; }
}

Мы напишем два метода для выполнения запроса, сначала для вставки, обновления или удаления из базы данных

private int ExecuteWrite(string query, Dictionary<string, object> args)
{
    int numberOfRowsAffected;

    //setup the connection to the database
    using (var con = new SQLiteConnection("Data Source=test.db"))
    {
        con.Open();
        
        //open a new command
        using (var cmd = new SQLiteCommand(query, con))
        {
            //set the arguments given in the query
            foreach (var pair in args)
            {
                cmd.Parameters.AddWithValue(pair.Key, pair.Value);
            }

            //execute the query and get the number of row affected
            numberOfRowsAffected = cmd.ExecuteNonQuery();
        }

        return numberOfRowsAffected;
    }
}

и второй для чтения из базы данных

private DataTable Execute(string query)
{
    if (string.IsNullOrEmpty(query.Trim()))
        return null;

    using (var con = new SQLiteConnection("Data Source=test.db"))
    {
        con.Open();
        using (var cmd = new SQLiteCommand(query, con))
        {
            foreach (KeyValuePair<string, object> entry in args)
            {
                cmd.Parameters.AddWithValue(entry.Key, entry.Value);
            }

            var da = new SQLiteDataAdapter(cmd);

            var dt = new DataTable();
            da.Fill(dt);

            da.Dispose();
            return dt;
        }
    }
}

Теперь давайте перейдем к нашим методам CRUD

Добавление пользователя

private int AddUser(User user)
{
    const string query = "INSERT INTO User(FirstName, LastName) VALUES(@firstName, @lastName)";

    //here we are setting the parameter values that will be actually 
    //replaced in the query in Execute method
    var args = new Dictionary<string, object>
    {
        {"@firstName", user.FirstName},
        {"@lastName", user.Lastname}
    };

    return ExecuteWrite(query, args);
}

Редактирование пользователя

private int EditUser(User user)
{
    const string query = "UPDATE User SET FirstName = @firstName, LastName = @lastName WHERE Id = @id";

    //here we are setting the parameter values that will be actually 
    //replaced in the query in Execute method
    var args = new Dictionary<string, object>
    {
        {"@id", user.Id},
        {"@firstName", user.FirstName},
        {"@lastName", user.Lastname}
    };

    return ExecuteWrite(query, args);
}

Удаление пользователя

private int DeleteUser(User user)
{
    const string query = "Delete from User WHERE Id = @id";

    //here we are setting the parameter values that will be actually 
    //replaced in the query in Execute method
    var args = new Dictionary<string, object>
    {
        {"@id", user.Id}
    };

    return ExecuteWrite(query, args);
}

Получение пользователя по Id

private User GetUserById(int id)
{
    var query = "SELECT * FROM User WHERE Id = @id";

    var args = new Dictionary<string, object>
    {
        {"@id", id}
    };

    DataTable dt = ExecuteRead(query, args);

    if (dt == null || dt.Rows.Count == 0)
    {
        return null;
    }

    var user = new User
    {
        Id = Convert.ToInt32(dt.Rows[0]["Id"]),
        FirstName = Convert.ToString(dt.Rows[0]["FirstName"]),
        Lastname = Convert.ToString(dt.Rows[0]["LastName"])
    };

    return user;
}

Выполнение запроса

using (SQLiteConnection conn = new SQLiteConnection(@"Data Source=data.db;Pooling=true;FailIfMissing=false"))
{
    conn.Open();
    using (SQLiteCommand cmd = new SQLiteCommand(conn))
    {
       cmd.CommandText = "query";
       using (SqlDataReader dr = cmd.ExecuteReader())
       {
           while(dr.Read())
           {
               //do stuff
           }
       }
    }
}

Примечание . Установка FailIfMissing в true создает файл data.db если отсутствует. Однако файл будет пустым. Таким образом, все необходимые таблицы необходимо воссоздать.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow