Ricerca…


Creazione di CRUD semplice con SQLite in C #

Prima di tutto è necessario aggiungere il supporto SQLite alla nostra applicazione. Ci sono due modi per farlo

  • Scarica la DLL che soddisfa il tuo sistema dalla pagina di download di SQLite e quindi aggiungi manualmente al progetto
  • Aggiungi dipendenza SQLite tramite NuGet

Lo faremo nel secondo modo

Per prima cosa apri il menu NuGet

inserisci la descrizione dell'immagine qui

e cercare System.Data.SQLite , selezionarlo e premere Installa

inserisci la descrizione dell'immagine qui

L'installazione può essere eseguita anche dalla console di Gestione pacchetti con

PM> Install-Package System.Data.SQLite

O solo per le funzionalità principali

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

Questo è tutto per il download, quindi possiamo andare direttamente nella programmazione.

Prima crea un semplice database SQLite con questa tabella e aggiungilo come un file al progetto

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

Inoltre, non dimenticare di impostare la proprietà Copia su Output Directory del file su Copia se più recente di Copia sempre , in base alle proprie esigenze

inserisci la descrizione dell'immagine qui

Crea una classe chiamata User, che sarà l'entità di base per il nostro database

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

Scriveremo due metodi per l'esecuzione della query, il primo per l'inserimento, l'aggiornamento o la rimozione dal database

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

e il secondo per la lettura dal database

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

Ora passiamo ai nostri metodi CRUD

Aggiungere utente

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

Modifica utente

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

Eliminazione dell'utente

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

Ottenere l'utente da 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;
}

Esecuzione della query

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

Nota : l'impostazione FailIfMissing su true crea il file data.db se mancante. Tuttavia, il file sarà vuoto. Quindi, qualsiasi tabella richiesta deve essere ricreata.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow