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

标签 c# vb.net ado.net

我有以下代码:

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

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

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

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

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

最佳答案

出于日志记录的目的,恐怕没有比自己构造字符串更好的方法了:

string query = cmd.CommandText;

foreach (SqlParameter p in cmd.Parameters)
{
    query = query.Replace(p.ParameterName, p.Value.ToString());
}

关于c# - 从 SqlCommand 对象获取生成的 SQL 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/265192/

相关文章:

c# - 指定服务器端代码的相对路径

c# - 如何在 PostBuildEvents 之前先运行 app.config 转换任务?

vb.net - 如何将参数从 vb.net 代码传递给 Crystal 报表

.net - Linq 查询超慢?

c# - DataReader 如何工作?

c# - 如何在 TcpClient 类中使用 SSL

vb.net - 在 VB 中从 SQL 检索数据(第 2 部分)

mysql - 通过 VB.net 中的多个条件的一个查询在 MySQL 中进行多次更新

nhibernate - 为什么 Entity Framework 不支持 ODBC?

c# - 为什么没有 `DBconnection.CloseAsync()` 而有 `DBconnection.OpenAsync()` ?