0

我有这段代码可以计算具有相同年份和日期的记录数。但是当我运行应用程序时它不起作用。这是我的代码:

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

}
4

3 回答 3

1

首先你有一个没有意义的空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再做一次

于 2013-05-15T11:00:24.763 回答
1

解决问题的更好方法是通过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 取决于您的要求

(还添加了对来自 V4Vendetta 的 DateTime.Now 的观察)

于 2013-05-15T11:01:36.417 回答
0

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

于 2013-05-15T10:42:42.877 回答