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

从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.ExecuteNonQueryEnd Using

我想知道是否有任何方法可以将最后的SQL语句作为字符串获得,它应该如下所示:

UPDATE someTable SET Value = "myValue" WHERE Id = 1234

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

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


九州编程
浏览 333回答 3
3回答

Cats萌萌

出于日志记录的目的,恐怕没有更好的方法可以做到这一点,只需要自己构造字符串:string query = cmd.CommandText;foreach (SqlParameter p in cmd.Parameters){     query = query.Replace(p.ParameterName, p.Value.ToString());}

犯罪嫌疑人X

您不能这样做,因为它不生成任何SQL。参数化查询(CommandText)作为准备好的语句的等价物发送到SQLServer。执行命令时,参数和查询文本将分别处理。在任何时候,都不会生成完整的SQL字符串。您可以使用SQLProfiler在幕后查看。
打开App,查看更多内容
随时随地看视频慕课网APP