使用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)
{
}
首先你有一个空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.Now
是DateTime
,不需要再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()来检索返回的计数