C# 使用MySqlDataReader计算特定数量的记录

C# 使用MySqlDataReader计算特定数量的记录,c#,mysql,winforms,mysqldatareader,C#,Mysql,Winforms,Mysqldatareader,我有一个代码,它计算同一年和同一日期的记录数。但当我运行应用程序时,它不工作。这是我的密码: try { string query = "SELECT * FROM tblOrder WHERE dateTime_coded=@dateTimeNow"; MySqlCommand cmd = new MySqlCommand(query, con); cmd.Parameters.AddWithValue("@dateTimeNow", Convert.ToDateTi

我有一个代码,它计算同一年和同一日期的记录数。但当我运行应用程序时,它不工作。这是我的密码:

try
{
    string query = "SELECT * FROM tblOrder WHERE dateTime_coded=@dateTimeNow";

    MySqlCommand cmd = new MySqlCommand(query, con);
    cmd.Parameters.AddWithValue("@dateTimeNow", Convert.ToDateTime(DateTime.Now).ToString("yyyy-MM"));

    MySqlDataReader dr = cmd.ExecuteReader();

    MessageBox.Show("OK");
    con.Open();

    while (dr.Read())
    {
        count++;
    }

    dr.Close();
    con.Close();
}
catch (Exception)
{

}

您可以
从…
中选择COUNT(*),然后使用cmd.ExecuteScalar()检索返回的计数。

首先,您有一个空的catch块,它没有意义

至少这样会更好

catch (Exception ex)
{
     MessageBox(ex.Message);// you would know if in case it failed
}
现在问题似乎是

MySqlDataReader dr = cmd.ExecuteReader();

MessageBox.Show("OK");
con.Open(); <--- opening after executing the reader ! 
另一个观察结果

cmd.Parameters.AddWithValue(“@dateTimeNow”,Convert.ToDateTime(DateTime.Now).ToString(“yyyy-MM”)


DateTime。现在
DateTime
无需再次转换它解决问题的更好方法是通过(SqlServer的链接,但MySql的链接相同)和使用COUNT函数

using(MySqlConnection con = new MySqlConnection("your_connection_string_here"))
{
        con.Open();
        string query = "SELECT COUNT(*) FROM tblOrder WHERE dateTime_coded=@dateTimeNow";
        using(MySqlCommand cmd = new MySqlCommand(query, con))
        {
            cmd.Parameters.AddWithValue("@dateTimeNow", DateTime.Now.ToString("yyyy-MM");
            int count = (int)cmd.ExecuteScalar();
            Console.WriteLine("There are " + count.ToString() + " records");
        }
}
正如您所看到的,我已经删除了try/catch块,它在这里是无用的,因为您不做任何异常操作。如果查询包含语法错误或无法与服务器建立连接,这将停止程序。因此,是否真的需要尝试/捕获取决于您的需求


(还添加了对DateTime的观察。现在来自V4Vendetta)

Offtopic
DateTime。现在
已经准备好了
DateTime
您不需要
Convert
部分。您可以解释一下,当我运行应用程序时,如何推断出它不工作部分什么不工作吗?不要编写一个空的catch块,在没有任何警告或消息的情况下隐藏异常,让您知道您的code@V4Vendetta我曾尝试在行
con.Close
后设置一个显示计数数的messagebox,但它没有显示,因此我推断它不起作用。@Steve那么我该如何处理捕获?什么使用
using block
的好处/效果是否与不使用相比?请参阅,using语句基本上是一个try/finally块,其中finally块关闭并处置在using行中声明和初始化的对象。这种语法优雅而有效。它消除了资源泄漏的可能性,特别是在数据库连接的情况下,这种泄漏非常昂贵。无论出于何种原因,如果在using块中出现异常,则可以保证代码将执行close并在close大括号处处置该对象。
using(MySqlConnection con = new MySqlConnection("your_connection_string_here"))
{
        con.Open();
        string query = "SELECT COUNT(*) FROM tblOrder WHERE dateTime_coded=@dateTimeNow";
        using(MySqlCommand cmd = new MySqlCommand(query, con))
        {
            cmd.Parameters.AddWithValue("@dateTimeNow", DateTime.Now.ToString("yyyy-MM");
            int count = (int)cmd.ExecuteScalar();
            Console.WriteLine("There are " + count.ToString() + " records");
        }
}