我有一个数据库,我使用SQL query从数据库中获取数据到我的C#应用程序中。
我在我的应用程序中有从MonthCalendar中选择当天数据的选项:
"between '" + monthCalendar1.SelectionStart.Month.ToString() + "' and '" + monthCalendar1.SelectionStart.AddDays(1).ToString()+因此,当我从我的日历表单中选择2012-03-06时,我的sql查询得到如下所示:
between '2012-03-06' and '2012-03-12'而且它起作用了。
现在我想要获取整个月的数据--如何修改sql查询的一部分,这样当我在4月份选择day时,我会得到这样的结果:
between '2012-04-01' and '2012-04-30'编辑:我取得了一些进展-我有一个月的第一天,但如何获得最后一天?
monthCalendar1.SelectionStart.Year.ToString()+"-"+monthCalendar1.SelectionStart.Month.ToString().PadLeft(2,'0')+"-"+"01"发布于 2012-04-20 19:12:48
切勿将SQL语句放在一起作为字符串!Remember Bobby表...
除此之外:
DateTime someDay = ...;
DateTime firstOfMonth = new DateTime(someDay.Year, someDay.Month, 1);
DateTime lastOfMonth = firstOfMonth.AddMonths(1).AddDays(-1);
string sqlString = "SELECT ... FROM ... WHERE ... AND ... BETWEEN @d1 AND @d2";
using (SqlCommand cmd = new SqlCommand(sqlString, connection))
{
cmd.Parameters.AddWithValue("@d1", firstOfMonth);
cmd.Parameters.AddWithValue("@d2", lastOfMonth);
...
}编辑
仔细想想:您实际上会注意到,您想要的内容不会返回任何介于lastOfMonth 00:00:01和lastOfMonth 23:59:59之间的条目。实际上,您应该从所选月份的第一个月到下一个月的第一个月进行查询,以获得所需的信息(减去一毫秒而不是一天是没有帮助的,因为SQL Server不能精确地存储毫秒)。
发布于 2012-04-20 19:06:54
DateTime startDate = new DateTime(dt.Year, dt.Month, 1);
DateTime enddate = new DateTime(dt.Year, dt.Month, DateTime.DaysInMonth(dt.Year, dt.Month));
between '" + startDate.ToString("yyyy-MM-dd") + "' and '" + enddate.ToString("yyyy-MM-dd")+使用此选项获取所选月份的最后一天
DateTime.DaysInMonth(dt.Year, dt.Month);http://social.msdn.microsoft.com/Forums/en/Vsexpressvcs/thread/218260ec-b610-4fa6-9d1b-f56f3438b721
发布于 2012-04-20 18:49:10
DateTime startDate = DateTime.Parse("03.04.2012");
DateTime firstofMonth = new DateTime(startDate.Year, startDate.Month, 1);
DateTime endOfMonth = firstofMonth.AddMonths(1).AddDays(-1);https://stackoverflow.com/questions/10244606
复制相似问题