如何在C#中可视化MySQL查询字符串

11 浏览
0 Comments

如何在C#中可视化MySQL查询字符串

我在正确参数传递给MySQL查询方面遇到了困难。在MySQL工作台中,我的查询正常工作,但在C#代码中不工作。我认为这是由于错误的参数传递导致的。

这就是为什么我想看看我究竟传递给cmd.ExecuteScalar()方法的是什么。但我无法确定cmd字符串如何确定。

在调试器中,我只能得到带有形式参数的查询,而不是传递的参数。甚至使用cmd.ToString()也得到这个无意义的结果:

MySql.Data.MySqlClient.MySqlCommand.

这是我的代码:

string timeStampStr = timeStamp.ToString("yyyy-MM-dd hh:mm:ss");
...
MySqlCommand cmd = new MySqlCommand("SELECT COUNT(*) FROM plc WHERE plc.last_communication < @timeThreshold AND plc.id = @plcId", _conn);
cmd.Parameters.AddWithValue("@timeThreshold", timeStampStr); // 这样正确吗?timeStampStr是一个字符串
cmd.Parameters.AddWithValue("@plcId", plcId);
object result = cmd.ExecuteScalar();

谢谢!

0
0 Comments

问题出现的原因:

在使用C#中的MySQL查询字符串时,无法直接可视化查询字符串,因为应用程序代码并没有将占位符替换为参数值,而是数据库引擎进行了替换。这导致无法直接获取到完整的查询字符串。

解决方法:

最好的方法可能是在MySQL上启用查询日志,并使用该日志来分析发送到数据库引擎的内容。这样可以从数据库引擎的角度来获取查询字符串。

一种解决方法是使用cmd.ToString()方法来获取查询字符串,但是这种方法无法获取到完整的查询字符串,只能获取到类的名称。所以这种方法并不适用。

另一种解决方法是通过客户端的调试器来查看查询字符串。可以使用以下代码来替换参数值:

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

然而,这种方法只能获得与数据库引擎接收到的查询字符串类似的字符串,而不是完全相同的查询字符串。因此,建议从数据库的角度来检查查询字符串,以便更好地进行调试。

在使用C#中的MySQL查询字符串时,无法直接可视化查询字符串。虽然可以通过一些方法获取到查询字符串,但是无法获取到完整的查询字符串。建议从数据库引擎的角度来检查查询字符串,以便更好地进行调试。

0