我有以下代码:
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)
如果有人想知道为什么我会这样做:
从.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
总的来说,感谢每个人的细节水平,以证明可以做什么,并展示实际发生的事情.非常感激.我喜欢彻底的解释; 他们增加了保证,并为答案提供了信任.