C# 如何使用SQLite数据库 – 轻量级嵌入式数据库的集成

22次阅读

在C#中集成sqlite推荐使用microsoft.Data.sqlite.net Core/.NET 5+首选),连接字符串指定数据库路径,需用using确保资源释放,必须使用参数化查询防sql注入,EF Core场景则安装Microsoft.EntityFrameworkCore.Sqlite并配置UseSqlite。

C# 如何使用SQLite数据库 – 轻量级嵌入式数据库的集成

在 C# 中集成 SQLite 很简单,关键是选对库、正确配置连接,并注意线程与资源管理。SQLite 是纯文件型数据库,无需单独安装服务,适合桌面应用、小型工具或移动端(通过 xamarin / MAUI)。

安装 SQLite 官方 NuGet 包

推荐使用官方维护的 Microsoft.Data.Sqlite(.NET Core / .NET 5+ 默认首选),它轻量、跨平台、与 EF Core 深度兼容。

  • 在项目中运行:dotnet add package Microsoft.Data.Sqlite
  • 旧项目若用 .NET Framework,可选 System.Data.SQLite,但注意需匹配 x86/x64 平台并额外部署 native dll
  • 避免混用多个 SQLite 包,容易引发加载冲突或版本不兼容

创建连接与执行基础操作

连接字符串只需指定数据库文件路径,不存在会自动创建。

  • 示例连接字符串:“Data Source=app.db”(相对路径)或 “Data Source=C:\data\app.db”(绝对路径)
  • using 确保连接和命令及时释放:
    using var conn = new SqliteConnection(“Data Source=app.db”);
    conn.Open();
    using var cmd = conn.CreateCommand();
    cmd.CommandText = “CREATE table if NOT EXISTS Users (Id Integer PRIMARY KEY, Name TEXT)”;
    cmd.ExecuteNonQuery();

安全插入与查询数据(防 SQL 注入)

永远不要拼接用户输入到 SQL 字符串中。使用参数化查询是唯一可靠方式。

  • 插入示例:cmd.CommandText = “INSERT INTO Users (Name) VALUES (@name)”;
    cmd.Parameters.AddWithValue(“@name”, userName);
  • 查询单值:cmd.CommandText = “select count(*) FROM Users WHERE Name = @name”;
    var count = (long)cmd.ExecuteScalar();
  • 读取多行:using var reader = cmd.ExecuteReader();
    while (reader.Read()) { console.WriteLine(reader.GetString(1)); }

配合 Entity Framework Core 使用(推荐中大型场景)

若项目已用 EF Core,只需安装 Microsoft.EntityFrameworkCore.Sqlite,配置 DbContext 即可。

  • Startup.csProgram.cs 中注册:
    services.AddDbContext(options =>
    options.UseSqlite(“Data Source=app.db”));
  • 迁移命令:dotnet ef migrations add Initdotnet ef database update
  • EF 自动处理连接生命周期、事务、连接池等细节,开发效率高且不易出错

基本上就这些。SQLite 在 C# 中用起来不复杂,但容易忽略连接释放、线程安全(默认连接非线程安全)和 WAL 模式启用等细节。小项目直接用 Microsoft.Data.Sqlite 足够,有 ORM 需求就上 EF Core SQLite 提供商。

text=ZqhQzanResources