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

本文关键字:记录 MySqlDataReader 计算 使用 | 更新日期: 2023-09-27 18:13:45

我有这个代码,用于计算具有相同年份和日期的记录的数量。但是当我运行应用程序时,它不起作用。下面是我的代码:

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)
{
}

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

首先你有一个空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 ! 

你应该试着把连接放到using块中

using(MySqlConnection con = new MySqlConnection())
{
//your stuff in here
}

另一个观察

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

DateTime.NowDateTime,不需要再Convert

一个更好的方法来解决你的问题是通过ExecuteScalar(链接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块,它在这里是无用的,因为你没有对异常做任何事情。如果您的查询包含语法错误或您无法与服务器建立连接,这将停止程序。因此,是否真的需要try/catch取决于您的需求

(还增加了对DateTime的观察。现在从V4Vendetta)

您可以SELECT COUNT(*) FROM ...,然后使用cmd.ExecuteScalar()来检索返回的计数