.NET 8 + Dapper + SQLite 静态 SqlHelper
摘要:.NET 8 + Dapper + SQLite 静态 SqlHelper我给你写一个开箱即用、纯静态类的 SQLite + Dapper 工具类,适配 .NET 8,包含增删改查、事务、参数化查询,完全满足生产环境使用。 第一步:先安装 NuGet 包在你的项目中安装这两个包: Install…
.NET 8 + Dapper + SQLite 静态 SqlHelper
我给你写一个开箱即用、纯静态类的 SQLite + Dapper 工具类,适配 .NET 8,包含增删改查、事务、参数化查询,完全满足生产环境使用。
第一步:先安装 NuGet 包
在你的项目中安装这两个包:
Install-Package Microsoft.Data.Sqlite
Install-Package Dapper
第二步:完整静态 SqlHelper 代码
using Dapper;
using Microsoft.Data.Sqlite;
using System.Data;
/// <summary>
/// .NET 8 + Dapper + SQLite 静态数据库操作类
/// </summary>
public static class SqlHelper
{
// 【重要】这里配置你的 SQLite 数据库连接字符串
private static readonly string _connectionString = "Data Source=MyDatabase.db;Cache=Shared";
#region 获取数据库连接
/// <summary>
/// 创建并打开 SQLite 连接
/// </summary>
private static SqliteConnection GetConnection()
{
var connection = new SqliteConnection(_connectionString);
connection.Open();
return connection;
}
#endregion
#region 执行 SQL(增删改)返回受影响行数
/// <summary>
/// 执行增删改语句
/// </summary>
/// <param name="sql">SQL语句</param>
/// <param name="param">参数</param>
/// <returns>受影响行数</returns>
public static int Execute(string sql, object? param = null)
{
using var conn = GetConnection();
return conn.Execute(sql, param);
}
#endregion
#region 执行 SQL 返回首行首列
/// <summary>
/// 执行查询返回首行首列
/// </summary>
public static T ExecuteScalar<T>(string sql, object? param = null)
{
using var conn = GetConnection();
return conn.ExecuteScalar<T>(sql, param);
}
#endregion
#region 查询单条数据
/// <summary>
/// 查询单条数据,返回实体
/// </summary>
public static T? QueryFirstOrDefault<T>(string sql, object? param = null)
{
using var conn = GetConnection();
return conn.QueryFirstOrDefault<T>(sql, param);
}
#endregion
#region 查询列表数据
/// <summary>
/// 查询多条数据,返回实体列表
/// </summary>
public static IEnumerable<T> Query<T>(string sql, object? param = null)
{
using var conn = GetConnection();
return conn.Query<T>(sql, param);
}
#endregion
#region 事务执行
/// <summary>
/// 事务执行多个操作
/// </summary>
/// <param name="action">事务内执行的逻辑</param>
public static void ExecuteTransaction(Action<IDbConnection, IDbTransaction> action)
{
using var conn = GetConnection();
using var transaction = conn.BeginTransaction();
try
{
action(conn, transaction);
transaction.Commit();
}
catch
{
transaction.Rollback();
throw;
}
}
#endregion
#region 异步方法(推荐 .NET 8 使用)
/// <summary>
/// 异步执行增删改
/// </summary>
public static async Task<int> ExecuteAsync(string sql, object? param = null)
{
using var conn = GetConnection();
return await conn.ExecuteAsync(sql, param);
}
/// <summary>
/// 异步查询单条
/// </summary>
public static async Task<T?> QueryFirstOrDefaultAsync<T>(string sql, object? param = null)
{
using var conn = GetConnection();
return await conn.QueryFirstOrDefaultAsync<T>(sql, param);
}
/// <summary>
/// 异步查询列表
/// </summary>
public static async Task<IEnumerable<T>> QueryAsync<T>(string sql, object? param = null)
{
using var conn = GetConnection();
return await conn.QueryAsync<T>(sql, param);
}
#endregion
}
第三步:使用示例(超简单)
1. 定义实体类
public class User
{
public int Id { get; set; }
public string Name { get; set; } = string.Empty;
public int Age { get; set; }
}
2. 调用 SqlHelper
// 1. 创建表(如果不存在)
SqlHelper.Execute(@"
CREATE TABLE IF NOT EXISTS User (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
Name TEXT NOT NULL,
Age INTEGER
)");
// 2. 新增
SqlHelper.Execute("INSERT INTO User(Name,Age) VALUES(@Name,@Age)", new { Name = "张三", Age = 20 });
// 3. 查询单条
var user = SqlHelper.QueryFirstOrDefault<User>("SELECT * FROM User WHERE Id=@Id", new { Id = 1 });
// 4. 查询列表
var userList = SqlHelper.Query<User>("SELECT * FROM User WHERE Age>@Age", new { Age = 18 });
// 5. 修改
SqlHelper.Execute("UPDATE User SET Name=@Name WHERE Id=@Id", new { Name = "李四", Id = 1 });
// 6. 删除
SqlHelper.Execute("DELETE FROM User WHERE Id=@Id", new { Id = 1 });
// 7. 事务使用
SqlHelper.ExecuteTransaction((conn, tran) =>
{
conn.Execute("INSERT INTO User(Name) VALUES(@Name)", new { Name = "事务测试" }, tran);
conn.Execute("UPDATE User SET Age=10 WHERE Name=@Name", new { Name = "事务测试" }, tran);
});
核心特性
- 纯静态类:无需实例化,直接调用
- Dapper 原生支持:自动映射实体,无需手动赋值
- 参数化查询:彻底防 SQL 注入
- 自动释放连接:
using自动管理连接释放 - 同步+异步:适配 .NET 8 异步最佳实践
- 事务支持:安全的事务提交/回滚
- 轻量高效:SQLite 嵌入式数据库,无服务依赖
连接字符串说明
Data Source=MyDatabase.db:数据库文件生成在程序运行目录Cache=Shared:多线程共享连接,避免 SQLite 锁冲突
总结
- 安装两个 NuGet 包即可直接使用
- 连接字符串改成你自己的数据库路径
- 所有方法都是静态调用,无依赖、无注入、极简使用
- 包含同步/异步、事务、增删改查全套功能