Szukaj…


Tworzenie prostych CRUD przy użyciu SQLite w C #

Przede wszystkim musimy dodać obsługę SQLite do naszej aplikacji. Można to zrobić na dwa sposoby

  • Pobierz bibliotekę DLL odpowiadającą Twojemu systemowi ze strony pobierania SQLite, a następnie dodaj ręcznie do projektu
  • Dodaj zależność SQLite przez NuGet

Zrobimy to w drugą stronę

Najpierw otwórz menu NuGet

wprowadź opis zdjęcia tutaj

i wyszukaj System.Data.SQLite , wybierz go i kliknij Zainstaluj

wprowadź opis zdjęcia tutaj

Instalacja może być również wykonana z konsoli Menedżera pakietów za pomocą

PM> Install-Package System.Data.SQLite

Lub tylko dla podstawowych funkcji

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

To wszystko do pobrania, więc możemy od razu zacząć pisać.

Najpierw utwórz prostą bazę danych SQLite z tą tabelą i dodaj ją jako plik do projektu

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

Nie zapomnij również ustawić właściwości Kopiuj do katalogu wyjściowego pliku na Kopiuj, jeśli zawsze jest nowsza wersja Kopiuj , w zależności od potrzeb

wprowadź opis zdjęcia tutaj

Utwórz klasę o nazwie Użytkownik, która będzie jednostką bazową dla naszej bazy danych

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

Napiszemy dwie metody wykonywania zapytań, pierwszą do wstawiania, aktualizowania lub usuwania z bazy danych

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;
    }
}

a drugi do odczytu z bazy danych

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;
        }
    }
}

Teraz przejdźmy do naszych metod CRUD

Dodawanie użytkownika

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);
}

Edycja użytkownika

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);
}

Kasowanie użytkownika

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);
}

Uzyskiwanie użytkownika przez 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;
}

Wykonywanie zapytania

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
           }
       }
    }
}

Uwaga : Ustawienie wartości FailIfMissing na true powoduje utworzenie pliku data.db jeśli go brakuje. Plik będzie jednak pusty. Tak więc wszystkie wymagane tabele muszą zostać odtworzone.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow