应用参数后查看查询的方法?

在C#应用程序中,我通过创建带参数的查询字符串来构建查询,然后添加参数及其值的命令。 例如:

string query = "UPDATE USERS u SET u.username = @PARM_USERNAME " + "WHERE u.id = @PARM_USERID "; command.Parameters.AddWithValue("@PARM_USERNAME", user.username); command.Parameters.AddWithValue("@PARM_USERID", user.id); command.Connection.Open(); int res = command.ExecuteNonQuery(); 

看看带有参数的查询是否有用,这在C#/ Visual Studio中是否可行? 我可以查看command.CommandText,但它只显示与上面查询相同的内容,其中包含参数占位符。 如果有帮助,这是针对MySQL的。

不能保证存在“带有参数的查询”这样的事情。 我希望驱动程序只需将命令作为SQL和参数以适当的forms发送,以表示每个值。 为什么要去逃避值等等,只为查询处理器取消它们并在另一侧解析它们? 以某种描述的二进制格式传递数据更有效风险更低。

您应该将其视为使用某些数据(参数)的一些代码(SQL),并将这两个概念保持在您的脑海中。 如果您需要记录正在进行的操作,我会将其作为参数化SQL和参数值分别记录。

如果要查看应用参数的查询:

 string tmp = command.CommandText.ToString(); foreach (SqlParameter p in cmd.Parameters) { tmp = tmp.Replace('@' + p.ParameterName.ToString(),"'" + p.Value.ToString() + "'"); } 

然后, tmp将使用所应用的参数保存查询。 每个参数都用单引号括起来。

当然,执行起来并不安全。 我用它来进行调试。

参数在服务器上保持独立,因此您看到的查询字符串实际上是与服务器无关的参数。 因此,我认为您需要更直接地了解参数化查询的工作方式,而不是尝试使用参数查看查询的外观。 您可以使用SQL跟踪查看查询。参数仍然是独立的,但它会显示值。

我的经验是SQL Server,所以我不确定这对MySQL有多适用。

不确定为什么需要这个,但如果是为了调试目的,你可以随时打开本地mysql数据库机器上的全局日志,看看发送到数据库的查询(你不想在生产机器上打开它) – 它可能会显着降低速度)。

如果您想使用工具,可以尝试使用Toad for MySql ,它具有Profiler,您可以看到发送到服务器的内容。

@christopher答案很棒,但只需要字符串参数' (单引号)。 最好是使用以下方法:

  private string getGeneratedSql(SqlCommand cmd) { string result = cmd.CommandText.ToString(); foreach (SqlParameter p in cmd.Parameters) { string isQuted = (p.Value is string) ? "'" : ""; result = result.Replace('@' + p.ParameterName.ToString(), isQuted + p.Value.ToString() + isQuted); } return result; }