Skip to content

在 .NET 中使用 SQLite 数据库

创建项目

sh
$ dotnet new console -o SqliteSamples

安装 Microsoft.Data.Sqlite

sh
$ cd SqliteSamples
$ dotnet add package Microsoft.Data.Sqlite

用法

c#
using Microsoft.Data.Sqlite;

namespace SqliteSamples
{
    class Program
    {
        static void Main()
        {
            // 创建数据库并插入初始数据
            CreateAndSeed();

            // 执行查询操作
            Query();

            // 清理资源:清除连接池并删除数据库文件
            SqliteConnection.ClearAllPools();
            File.Delete("hello.db");
        }

        static void CreateAndSeed()
        {
            // 创建SQLite数据库连接,连接到hello.db文件
            using var connection = new SqliteConnection("Data Source=hello.db");

            // 打开数据库连接
            connection.Open();

            // 创建命令对象
            var command = connection.CreateCommand();

            // 设置命令文本:创建user表并插入初始数据
            command.CommandText = """
                CREATE TABLE user (
                    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,  -- 用户ID,主键,自增
                    name TEXT NOT NULL                              -- 用户名,文本类型,非空
                );

                -- 插入三条初始用户数据
                INSERT INTO user
                VALUES (1, 'Brice'),
                       (2, 'Alexander'),
                       (3, 'Nate');
            """;

            // 执行非查询命令(创建表和插入数据)
            command.ExecuteNonQuery();

            // 从控制台获取用户输入的用户名
            Console.Write("Name: ");
            var name = Console.ReadLine();

            #region snippet_Parameter
            // 使用参数化查询插入新用户,防止SQL注入
            command.CommandText = "INSERT INTO user (name) VALUES ($name)";
            command.Parameters.AddWithValue("$name", name);
            #endregion

            // 执行插入操作
            command.ExecuteNonQuery();

            // 获取最后插入行的ID
            command.CommandText = "SELECT last_insert_rowid()";
            var newId = (long)command.ExecuteScalar()!;

            // 输出新用户的ID
            Console.WriteLine($"Your new user ID is {newId}.");
        }

        static void Query()
        {
            // 从控制台获取要查询的用户ID
            Console.Write("User ID: ");
            var line = Console.ReadLine();

            // 如果输入为空,直接返回
            if (line is null)
            {
                return;
            }

            // 将输入转换为整数
            var id = int.Parse(line);

            #region snippet_HelloWorld
            // 创建新的数据库连接
            using var connection = new SqliteConnection("Data Source=hello.db");

            // 打开连接
            connection.Open();

            // 创建命令对象
            using var command = connection.CreateCommand();

            // 设置查询命令:根据ID查询用户名
            command.CommandText = """
                SELECT name
                FROM user
                WHERE id = $id
            """;

            // 添加参数化查询参数
            command.Parameters.AddWithValue("$id", id);

            // 执行查询并获取数据读取器
            using var reader = command.ExecuteReader();

            // 遍历查询结果
            while (reader.Read())
            {
                // 读取第一列的值(用户名)
                var name = reader.GetString(0);

                // 输出问候语
                Console.WriteLine($"Hello, {name}!");
            }
            #endregion
        }
    }
}

测试

sh
$ dotnet run
Name: Panda
Your new user ID is 4.
User ID: 4
Hello, Panda!

Last updated:

Released under the MIT License.