相关疑难解决方法(0)

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

我有以下代码:

Using cmd As SqlCommand = Connection.CreateCommand
    cmd.CommandText = "UPDATE someTable SET Value = @Value"
    cmd.CommandText &= " WHERE Id = @Id"
    cmd.Parameters.AddWithValue("@Id", 1234)
    cmd.Parameters.AddWithValue("@Value", "myValue")
    cmd.ExecuteNonQuery
End Using
Run Code Online (Sandbox Code Playgroud)

我想知道是否有任何方法可以将最终的SQL语句作为String获取,它应该如下所示:

UPDATE someTable SET Value = "myValue" WHERE Id = 1234
Run Code Online (Sandbox Code Playgroud)

如果有人想知道为什么我会这样做:

  • 用于记录(失败)语句
  • 有可能将其复制并粘贴到企业管理器以进行测试

c# vb.net ado.net

177
推荐指数
7
解决办法
15万
查看次数

从.NET可以获得由SqlCommand对象生成的完整SQL字符串(使用SQL参数)吗?

从.NET环境中,我可以访问由SqlCommand对象生成的完整SQL字符串吗?

注意:在调试模式下,完整的SQL字符串显示在VisualStudio中的Intellisense悬停中.

如果必须,我愿意使用反射技术.我相信这里有人知道如何做到这一点.


更新1:
我正在调用具有参数的存储过程,cmd.CommandType = CommandType.StoredProcedure并且我正在尝试获取生成并运行的完整SQL.我不知道是不是cmd.如果可能将完整字符串存储在状态字段或类似内容中,则Prepare()方法在这种情况下可能不会有用.


更新2:

根据下面的答案(和引用),表明在准备或执行过程中没有内部生成完整的SQL字符串,我做了一些使用.NET Reflector.即使是内部连接类似乎也会传递对象而不是将它们归结为字符串,例如:

内部抽象void AddPreparedCommand(SqlCommand cmd);
声明类型:System.Data.SqlClient.SqlInternalConnection
程序集:System.Data,Version = 2.0.0.0


总的来说,感谢每个人的细节水平,以证明可以做什么,并展示实际发生的事情.非常感激.我喜欢彻底的解释; 他们增加了保证,并为答案提供了信任.

sql-server reflection ado.net sqlcommand

6
推荐指数
2
解决办法
2万
查看次数

标签 统计

ado.net ×2

c# ×1

reflection ×1

sql-server ×1

sqlcommand ×1

vb.net ×1