Zoeken…


Eenvoudige CRUD maken met SQLite in C #

Allereerst moeten we SQLite-ondersteuning toevoegen aan onze applicatie. Er zijn twee manieren om dat te doen

  • Download DLL die geschikt is voor uw systeem van de SQLite-downloadpagina en voeg deze vervolgens handmatig aan het project toe
  • Voeg SQLite-afhankelijkheid toe via NuGet

We doen het op de tweede manier

Open eerst het NuGet-menu

voer hier de afbeeldingsbeschrijving in

en zoek naar System.Data.SQLite , selecteer het en klik op Installeren

voer hier de afbeeldingsbeschrijving in

Installatie kan ook worden gedaan vanuit Package Manager Console met

PM> Install-Package System.Data.SQLite

Of voor alleen kernfuncties

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

Dat is het voor de download, dus we kunnen meteen beginnen met coderen.

Maak eerst een eenvoudige SQLite-database met deze tabel en voeg deze toe als bestand aan het project

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

Vergeet ook niet om de eigenschap Copy to Output Directory van het bestand in te stellen op Copy als altijd nieuwer van Copy is , op basis van uw behoeften

voer hier de afbeeldingsbeschrijving in

Maak een klasse met de naam Gebruiker, die de basisentiteit voor onze database wordt

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

We schrijven twee methoden voor het uitvoeren van zoekopdrachten, de eerste voor het invoegen, bijwerken of verwijderen uit de 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;
    }
}

en de tweede voor het lezen uit de 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;
        }
    }
}

Laten we nu eens kijken naar onze CRUD- methoden

Gebruiker toevoegen

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

Gebruiker bewerken

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

Gebruiker verwijderen

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

Gebruiker Id op 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;
}

Zoekopdracht uitvoeren

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

Opmerking : Als FailIfMissing op true wordt ingesteld, wordt het bestand data.db als het ontbreekt. Het bestand is echter leeg. Alle vereiste tabellen moeten dus opnieuw worden gemaakt.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow