C#:SQLite 进行数据库操作的技术指南

admin
1
2025-12-29

🚀 1、简述

SQLite 是一款轻量级、嵌入式的关系型数据库,非常适合桌面应用、小型网站、移动端项目或需要“零配置数据库”的场景。本文将带你从零开始,在 C# 中使用 SQLite 进行数据库操作,并提供完整的实战代码样例。

image-pvul.png


2、什么是 SQLite

SQLite 是一个开源的、无服务器的数据库引擎。它的特点包括:

📦 单文件存储(一个 .db 文件即可)

⚡ 高性能与快速响应

🧩 无需安装服务或配置

🔒 支持事务与 SQL 标准

🌍 跨平台(Windows、macOS、Linux、Android、iOS)

在 C# 项目中,我们通常使用官方提供的 System.Data.SQLiteMicrosoft.Data.Sqlite 来操作 SQLite 数据库。


3、实践样例

🔥 连接数据库

🔥 创建数据表

🔥 插入数据

🔥 查询与读取数据

🔥 更新与删除数据

我们通过一个简单的例子来演示这些操作。

3.1 环境准备

新建一个控制台项目

dotnet new console -n SQLiteDemo
cd SQLiteDemo

安装 NuGet 包

推荐使用 Microsoft.Data.Sqlite

dotnet add package Microsoft.Data.Sqlite

📘 3.2 代码示例

using System;
using Microsoft.Data.Sqlite;

class Program
{
    static void Main()
    {
        string dbPath = "Data Source=demo.db";

        using (var connection = new SqliteConnection(dbPath))
        {
            connection.Open();

            // 1. 创建表
            var createCmd = connection.CreateCommand();
            createCmd.CommandText = @"
                CREATE TABLE IF NOT EXISTS Users (
                    Id INTEGER PRIMARY KEY AUTOINCREMENT,
                    Name TEXT NOT NULL,
                    Age INTEGER
                );
            ";
            createCmd.ExecuteNonQuery();

            // 2. 插入数据
            var insertCmd = connection.CreateCommand();
            insertCmd.CommandText = "INSERT INTO Users (Name, Age) VALUES (@name, @age)";
            insertCmd.Parameters.AddWithValue("@name", "Alice");
            insertCmd.Parameters.AddWithValue("@age", 25);
            insertCmd.ExecuteNonQuery();

            // 3. 查询数据
            var selectCmd = connection.CreateCommand();
            selectCmd.CommandText = "SELECT Id, Name, Age FROM Users";
            using (var reader = selectCmd.ExecuteReader())
            {
                Console.WriteLine("用户列表:");
                while (reader.Read())
                {
                    Console.WriteLine($"ID={reader.GetInt32(0)}, Name={reader.GetString(1)}, Age={reader.GetInt32(2)}");
                }
            }

            // 4. 更新数据
            var updateCmd = connection.CreateCommand();
            updateCmd.CommandText = "UPDATE Users SET Age = @newAge WHERE Name = @name";
            updateCmd.Parameters.AddWithValue("@newAge", 26);
            updateCmd.Parameters.AddWithValue("@name", "Alice");
            updateCmd.ExecuteNonQuery();

            // 5. 删除数据
            var deleteCmd = connection.CreateCommand();
            deleteCmd.CommandText = "DELETE FROM Users WHERE Name = @name";
            deleteCmd.Parameters.AddWithValue("@name", "Alice");
            deleteCmd.ExecuteNonQuery();

            Console.WriteLine("数据操作完成!");
        }
    }
}

3.3 执行效果

运行程序后,SQLite 会在项目目录生成一个 demo.db 文件。
程序输出类似如下:

用户列表:
ID=1, Name=Alice, Age=25
数据操作完成!

数据库文件可以用任何 SQLite 浏览器(如 DB Browser for SQLite)打开查看。

3.4 实践扩展

你可以将常用的数据库操作封装为一个服务类,方便在项目中复用:

public class SQLiteService
{
    private readonly string _connectionString;

    public SQLiteService(string dbPath)
    {
        _connectionString = $"Data Source={dbPath}";
    }

    public void ExecuteNonQuery(string sql, params (string, object)[] parameters)
    {
        using var conn = new SqliteConnection(_connectionString);
        conn.Open();

        using var cmd = conn.CreateCommand();
        cmd.CommandText = sql;
        foreach (var (name, value) in parameters)
        {
            cmd.Parameters.AddWithValue(name, value);
        }
        cmd.ExecuteNonQuery();
    }

    public void Query(string sql, Action<SqliteDataReader> handleRow)
    {
        using var conn = new SqliteConnection(_connectionString);
        conn.Open();

        using var cmd = conn.CreateCommand();
        cmd.CommandText = sql;
        using var reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            handleRow(reader);
        }
    }
}

使用方式:

var db = new SQLiteService("demo.db");
db.ExecuteNonQuery("INSERT INTO Users (Name, Age) VALUES (@name, @age)", ("@name", "Bob"), ("@age", 30));

db.Query("SELECT * FROM Users", reader =>
{
    Console.WriteLine($"{reader["Name"]} ({reader["Age"]})");
});

4、结语

通过本文的示例,你已经掌握了:

🔥 如何在 C# 中集成 SQLite;

🔥 如何执行 CRUD 操作;

🔥 如何封装可复用的数据库服务类。

SQLite 的优点在于轻便与嵌入式特性,非常适合:

🔥 桌面程序(如 WPF / WinForms)

🔥 小型 Web 应用

🔥 移动端 App(Xamarin / MAUI)

🔥 快速原型验证与数据缓存

SQLite 简洁而强大,是 C# 开发者的得力工具之一。建议结合 ORM 框架(如 DapperEntity Framework Core)进一步优化项目结构。

动物装饰