c# - 如何记录执行的sql语句

标签 c# ado.net sqlcommand

<分区>

场景

我正在使用 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 类是否有任何属性可以完成这项工作?

最佳答案

没有什么神奇的方法可以做到这一点,但是有许多工具可以很好地与 ADO.NET 配合使用以捕获正在发生的事情。例如,mini-profiler通过包装 ADO.NET 来做到这一点,这通常只涉及对“创建连接”代码的一次更改——然后它会在内部记录操作。该代码是开源的,因此将它调整为您自己的日志记录框架是微不足道的。

例如,如果我进入(登录)SEDE,并随机查看一个页面,here, say ,我可以看到所有记录的 SQL 操作(无需更改代码即可获取此日志记录),here - 或者万一变得不可用:

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 等中轻松运行查询。

关于c# - 如何记录执行的sql语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11932231/

相关文章:

c# - 如何从 C# 中的 Object[] 中删除特定类型的变量

c# - 将动态传递给方法时,结果是动态表达式,即使它不是

c# - 在 .Set 之后直接在 EventWaitHandle 上调用 .Close (.Dispose) 是否安全?

c# - 与 Parameters.Add 和 Parameters.AddWithValue 的区别

C#-SQL : How to execute a batch of StoredProcedure?

.net - SqlCommand.Prepare() 有什么作用,应该在什么时候使用?

c# - 在父窗体上启用滚动条

c# - 非常奇怪的 DataReader 性能问题

c# - 在 C# 中读取制表符分隔文本文件的最佳方式是什么

c# - 正则表达式删除 C# 中的转义字符(特定字符)