Sök…


Skapa enkel CRUD med SQLite i C #

Först av allt måste vi lägga till SQLite-stöd till vår applikation. Det finns två sätt att göra det

  • Ladda ner DLL som passar ditt system från SQLite nedladdningssida och lägg sedan till projektet manuellt
  • Lägg till SQLite-beroende via NuGet

Vi gör det på andra sättet

Öppna först NuGet-menyn

ange bildbeskrivning här

och söka efter System.Data.SQLite , välj det och tryckInstallera

ange bildbeskrivning här

Installation kan också göras från Package Manager Console med

PM> Install-Package System.Data.SQLite

Eller för endast kärnfunktioner

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

Det är det för nedladdningen, så vi kan gå direkt in i kodning.

Skapa först en enkel SQLite-databas med den här tabellen och lägg till den som en fil i projektet

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

Glöm inte att ställa in egenskapen Copy to Output Directory för filen till Copy om den är nyare i Copy alltid , baserat på dina behov

ange bildbeskrivning här

Skapa en klass som heter User, som kommer att vara basenheten för vår databas

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

Vi skriver två metoder för att utföra frågan, en för första för att infoga, uppdatera eller ta bort från databasen

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

och den andra för att läsa från databasen

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

Låt oss nu gå in på våra CRUD- metoder

Lägger till användare

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

Redigerar användare

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

Tar bort användare

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

Skaffa användare av 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;
}

Utför fråga

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

Obs! FailIfMissing ställer in FailIfMissing till true skapas filen data.db om den saknas. Filen kommer dock att vara tom. Så alla nödvändiga tabeller måste återskapas.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow