C# Dapper如何记录执行的SQL Dapper SQL日志记录方法

admin 百科 9
推荐使用 Dapper v2.1+ 的 IDbCommandInterceptor 实现 SQL 日志,通过重写 BeforeExecute 方法记录 CommandText 和 Parameters;兼容旧版可包装 IDbConnection;手动拼接 SQL 仅限临时调试。

C# Dapper如何记录执行的SQL Dapper SQL日志记录方法-第1张图片-佛山资讯网

在使用 Dapper 时,默认不输出执行的 SQL 语句,但可以通过几种轻量、实用的方式实现 SQL 日志记录,无需引入重型 ORM 日志框架(如 Serilog + EF 集成)。核心思路是利用 Dapper 的 IDbConnection 扩展能力或包装连接对象,捕获命令执行前的 SQL 和参数。

方法一:使用 IDbCommandInterceptor(推荐,Dapper v2.1+)

Dapper 2.1 起原生支持拦截器(IDbCommandInterceptor),可统一监听所有命令执行过程。这是最干净、侵入性最小的方式。

  • 创建一个实现 IDbCommandInterceptor 的类,重写 BeforeExecute 方法,在其中记录 SQL、参数、连接信息
  • 通过 Dapper.DefaultCommandInterceptor = new YourSqlLogger(); 全局注册
  • BeforeExecute 中可访问 command.CommandTextcommand.Parameters(注意:参数值需遍历获取,部分参数类型需特殊处理,如 DbNull 或数组)

示例片段:

  public class SqlLogger : IDbCommandInterceptor
  {
    public void BeforeExecute(IDbCommand command)
    {
      var sql = command.CommandText;
      var paramStr = string.Join(", ", command.Parameters.Cast().Select(p => $"{p.ParameterName}={p.Value ?? "NULL"}"));
      Console.WriteLine($"[SQL] {sql} | Params: {paramStr}");
    }
    // 其他方法可空实现
  }

启动时注册:Dapper.DefaultCommandInterceptor = new SqlLogger();

标签: app c#

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~