Har*_*vey 1 c# mysql datetime date
在我的应用程序中,我想计算当前年和月相同的记录数.所以我的逻辑是将当前年份和月份与我表格中的date_needed列进行比较.我是这样做的:
using (MySqlConnection con = new MySqlConnection(serverstring))
{
con.Open();
string query = "SELECT * FROM tblOrder WHERE date_needed=@dateTimeNow";
using (MySqlCommand cmd = new MySqlCommand(query, con))
{
cmd.Parameters.AddWithValue("@dateTimeNow", DateTime.Now.ToString("yyyy-MM")); using (MySqlDataReader dr = cmd.ExecuteReader())
{
int count = 0;
while (dr.Read())
{
count++;
}
MessageBox.Show(count.ToString());
}
}
}
Run Code Online (Sandbox Code Playgroud)
我知道它不起作用,因为在我的消息框中它显示零而不是一条记录.您认为这个问题是什么?
你应该提供一个完整的日期(作为一个DateTime,没有格式化 - 文本转换几乎总是一个坏主意,当发送参数值到数据库)并使用MySQL日期/时间函数来比较值.
例如:
string query = @"SELECT * FROM tblOrder
WHERE MONTH(date_needed) = MONTH(@dateTimeNow)
AND YEAR(date_needed) = YEAR(@dateTimeNow)";
Run Code Online (Sandbox Code Playgroud)
或者,您可以将月份和年份作为单独的参数传递:
string query = @"SELECT * FROM tblOrder
WHERE MONTH(date_needed) = @month
AND YEAR(date_needed) = @year";
Run Code Online (Sandbox Code Playgroud)
或者 - 可能更具性能 - 您可以给出起点和终点:
string query = @"SELECT * FROM tblOrder
WHERE date_needed >= @start AND date_needed < @end";
Run Code Online (Sandbox Code Playgroud)
在这里,您将设置@start为本月@end的开始,以及下个月的开始.你可以把它们当作:
// Consider using UtcNow.Date instead. Basically, think about time zones.
DateTime today = DateTime.Today;
DateTime start = new DateTime(today.Year, today.Month, 1);
DateTime end = start.AddMonths(1);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5828 次 |
| 最近记录: |