如何记录已执行的SQL语句
如何记录已执行的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'
问题
SqlCommand
或 SqlConnection
类中是否有属性可以完成此任务?
admin 更改状态以发布 2023年5月21日
没有魔法的方法可以做到这一点,但有许多工具可以与ADO.NET良好地配合使用来捕获正在发生的事情。例如,mini-profiler通过包装ADO.NET来实现这一点,这通常只需要对“创建连接”的代码进行一次简单的更改——然后它会在内部记录操作。该代码是开源的,因此可以轻松地将其调整为自己的日志框架。
例如,如果我登录到SEDE并查看随机页面,比如这个,我可以看到所有记录的SQL操作(不需要进行任何代码更改),在这里——或者在该页面不可用的情况下:
唯一的小问题是您明确使用了SqlParameter
,这可能需要更改为cmd.CreateParameter()
。或者使用诸如dapper之类的工具使其更容易:
conn.Execute("sp_Trk_GetSuspiciusVisitor", new { channel = "gb", data = DateTime.Today.AddDays(-1) }, commandType: CommandType.StoredProcedure);
请注意,上面显示的declare
语句不是原始查询的一部分;该工具添加了这些内容,以便在SSMS等中轻松运行查询。