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

Mik*_*ike 14 .net c# mysql parameterized

在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();
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*mus 12

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

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

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

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

  • 如果你执行.AddWithValue("@ P1",...),那么ParameterName已经以'@'开头,所以上面的代码试图用值替换"@@ P1",所以它不起作用.我错过了什么? (4认同)
  • 我知道这很旧,但是您的代码有问题。首先,在第一行中使用“ command”,在其他行中使用“ cmd”。它们应该是相同的。其次,没有必要在CommandText上调用ToString()。它已经是一个字符串。接下来,仅当参数是可引用的值时,才应将其括在引号中。例如,整数不是。最后,正如已经指出的那样,您不应该在参数名前面加上@,因为它通常已经有了它。 (2认同)

Jon*_*eet 5

有没有保证,还有就是这样的事“与参数查询应用”。我希望驱动程序可以简单地以SQL形式发送命令,并以适当的形式发送参数以表示每个值。为什么要麻烦转义值等,只是让查询处理器取消转义并在另一端解析它们?仅以某种描述的二进制格式传递数据会更有效风险更低。

您应该将其视为使用某些数据(参数)的某些代码(SQL),并使这两个概念完全分开。如果您需要记录正在发生的事情,我会将其分别记录参数化SQL和参数值。