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");
}
}