如何记录已执行的SQL语句

13 浏览
0 Comments

如何记录已执行的SQL语句

这个问题已经有了答案:

从SqlCommand对象获取生成的SQL语句?

情境

我正在使用ADO.NET的SqlCommand执行存储过程:

cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sp_Trk_GetSuspiciusVisitor";
cmd.Parameters.Add(new SqlParameter("channel","gb"));
cmd.Parameters.Add(new SqlParameter("data", DateTime.Today.AddDays(-1)));
cmd.Connection = conn;

我想记录执行的SQL语句。在这种情况下,我想要记录字符串:

sp_Trk_GetSuspiciusVisitor 'gb', '2012-08-12'

问题

SqlCommandSqlConnection 类中是否有属性可以完成此任务?

admin 更改状态以发布 2023年5月21日
0
0 Comments

不幸的是,您需要循环遍历所有参数以获取它们的值,并将其与命令文本连接起来。

0
0 Comments

没有魔法的方法可以做到这一点,但有许多工具可以与ADO.NET良好地配合使用来捕获正在发生的事情。例如,mini-profiler通过包装ADO.NET来实现这一点,这通常只需要对“创建连接”的代码进行一次简单的更改——然后它会在内部记录操作。该代码是开源的,因此可以轻松地将其调整为自己的日志框架。

例如,如果我登录到SEDE并查看随机页面,比如这个,我可以看到所有记录的SQL操作(不需要进行任何代码更改),在这里——或者在该页面不可用的情况下:

enter image description here

唯一的小问题是您明确使用了SqlParameter,这可能需要更改为cmd.CreateParameter()。或者使用诸如dapper之类的工具使其更容易:

conn.Execute("sp_Trk_GetSuspiciusVisitor",
    new { channel = "gb", data = DateTime.Today.AddDays(-1) },
    commandType: CommandType.StoredProcedure);

请注意,上面显示的declare语句不是原始查询的一部分;该工具添加了这些内容,以便在SSMS等中轻松运行查询。

0