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

时间:2014-09-16 12:18:31

标签: c# mysql string

我正在努力将正确的参数传递给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); // Is this correct ? timeStampStr is a string
cmd.Parameters.AddWithValue("@plcId", plcId);
object result = cmd.ExecuteScalar();

谢谢!

1 个答案:

答案 0 :(得分:3)

最好的办法是在MySQL上启用query log并使用它来分析发送到数据库引擎的内容。

这是因为应用程序代码实际上并没有用参数值替换占位符,数据库引擎。应用程序代码调用参数化查询并同时提供参数。 (作为一个副作用,这允许数据库引擎更有效地缓存参数化查询的执行计划,因为查询本身不会改变。当使用参数化查询超过连接值时,这提供了轻微的性能改进。)< / p>


  

即使使用cmd.ToString(),我也会得到这样的信息:MySql.Data.MySqlClient.MySqlCommand。

这不是废话,这是你打电话给.ToString()的班级的名字。引用类型的.ToString()的默认行为是返回类型的名称,除非您覆盖它。