当前位置:首页 > 代码笔记

.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);
});

核心特性

  1. 纯静态类:无需实例化,直接调用
  2. Dapper 原生支持:自动映射实体,无需手动赋值
  3. 参数化查询:彻底防 SQL 注入
  4. 自动释放连接using 自动管理连接释放
  5. 同步+异步:适配 .NET 8 异步最佳实践
  6. 事务支持:安全的事务提交/回滚
  7. 轻量高效:SQLite 嵌入式数据库,无服务依赖

连接字符串说明

  • Data Source=MyDatabase.db:数据库文件生成在程序运行目录
  • Cache=Shared:多线程共享连接,避免 SQLite 锁冲突

总结

  1. 安装两个 NuGet 包即可直接使用
  2. 连接字符串改成你自己的数据库路径
  3. 所有方法都是静态调用,无依赖、无注入、极简使用
  4. 包含同步/异步、事务、增删改查全套功能

扫描二维码推送至手机访问。

版权声明:本文由DM98发布,如需转载请注明出处。

本文链接:https://blog.dm98.vip/post/3.html

标签: dappersqlite
分享给朋友:
返回列表

没有更早的文章了…

下一篇:HTMX 超详细完整教程

“.NET 8 + Dapper + SQLite 静态 SqlHelper” 的相关文章

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。