28
Lesson 28 of 35 Β· Data & Storage

Database Basics & SQLite

Databases store data persistently and let you query it efficiently. This lesson introduces relational database concepts and SQLiteβ€”a lightweight, file-based database perfect for desktop and small web applications.

Installing Microsoft.Data.Sqlite

Add the NuGet package: right-click the project β†’ Manage NuGet Packages β†’ search for Microsoft.Data.Sqlite and install it.

Creating a Database and Table

Connect with a SqliteConnection, create a command, and execute SQL using ExecuteNonQuery().

Create DB CreateDB.cs
using Microsoft.Data.Sqlite;

const string ConnStr = "Data Source=app.db";

using var conn = new SqliteConnection(ConnStr);
conn.Open();

var cmd = conn.CreateCommand();
cmd.CommandText = @"
    CREATE TABLE IF NOT EXISTS Students (
        Id      INTEGER PRIMARY KEY AUTOINCREMENT,
        Name    TEXT    NOT NULL,
        Grade   REAL    NOT NULL,
        Enrolled DATE  NOT NULL
    )";
cmd.ExecuteNonQuery();
Console.WriteLine("Database created.");

Inserting & Querying Data

Always use parameterised queries to prevent SQL injection.

CRUD CRUD.cs
// Insert
using (var conn = new SqliteConnection(ConnStr))
{
    conn.Open();
    var cmd = conn.CreateCommand();
    cmd.CommandText = "INSERT INTO Students (Name, Grade, Enrolled) VALUES ($name, $grade, $enrolled)";
    cmd.Parameters.AddWithValue("$name",     "Alice");
    cmd.Parameters.AddWithValue("$grade",    92.5);
    cmd.Parameters.AddWithValue("$enrolled", DateTime.Today.ToString("yyyy-MM-dd"));
    cmd.ExecuteNonQuery();
}

// Query
using (var conn = new SqliteConnection(ConnStr))
{
    conn.Open();
    var cmd = conn.CreateCommand();
    cmd.CommandText = "SELECT * FROM Students ORDER BY Grade DESC";
    using var reader = cmd.ExecuteReader();
    while (reader.Read())
        Console.WriteLine($"{reader["Name"]}: {reader["Grade"]}");
}