当使用MySqlCommand参数时,如何查看命令字符串?

7 浏览
0 Comments

当使用MySqlCommand参数时,如何查看命令字符串?

代码如下所示:

MySqlCommand cmd = new MySqlCommand(
    "SELECT * FROM DB_name_here WHERE some_field =@some_value;"
);
cmd.Parameters.AddWithValue("@some_value", some_string_here);

我可以将它作为一个简单的字符串返回,以便于调试,该字符串如下所示:

SELECT * FROM DB_name_here WHERE some_field =some_string_here;

显然,cmd.ToString()方法无法满足我的需求,它会立即返回一个`MySql.Data.MySqlClient.MySqlCommand`对象。

cmd.CommandText方法将返回带有参数的字符串(在我的例子中是`@some_value`)。有什么建议吗?

0
0 Comments

问题的原因是用户想要在使用MySqlCommand参数时查看命令字符串,但不知道如何实现。解决方法是使用MySqlCommand对象的CommandText属性来获取实际的命令字符串,然后使用foreach循环遍历Parameters参数,并用参数的值替换命令字符串中的参数名称。

具体的解决方法如下:

String commandtext = cmd.CommandText;
foreach (SqlParameter p in cmd.Parameters)
    commandtext = commandtext.Replace(p.ParameterName, p.Value.ToString());

这样就可以得到替换参数后的命令字符串。这个方法在大多数情况下都可以正常工作,但是像ispiro指出的答案一样,会导致字符串没有加引号。不过还是感谢提供帮助,这个方法已经足够好用了。

然而,在Ubuntu 16.04中使用cmd.Parameters.AddWithValue("_value", some_string_here)时,这个方法并不起作用。谢谢你的建议。

0
0 Comments

根据这篇答案,直接无法做到。答案中提到,从未生成完整的SQL字符串。为解决该问题,可以参考其他答案中提供的方法。特别是这个链接:https://stackoverflow.com/a/265261/939213。当你期望某件事情简单直接的时候,结果总是令人失望的。感谢提供链接中的好答案。

0