首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#中的MonthCalendar

C#中的MonthCalendar
EN

Stack Overflow用户
提问于 2012-04-20 18:37:09
回答 3查看 2.3K关注 0票数 1

我有一个数据库,我使用SQL query从数据库中获取数据到我的C#应用程序中。

我在我的应用程序中有从MonthCalendar中选择当天数据的选项:

代码语言:javascript
复制
"between '" + monthCalendar1.SelectionStart.Month.ToString() + "' and '" + monthCalendar1.SelectionStart.AddDays(1).ToString()+

因此,当我从我的日历表单中选择2012-03-06时,我的sql查询得到如下所示:

代码语言:javascript
复制
between '2012-03-06' and '2012-03-12'

而且它起作用了。

现在我想要获取整个月的数据--如何修改sql查询的一部分,这样当我在4月份选择day时,我会得到这样的结果:

代码语言:javascript
复制
between '2012-04-01' and '2012-04-30'

编辑:我取得了一些进展-我有一个月的第一天,但如何获得最后一天?

代码语言:javascript
复制
monthCalendar1.SelectionStart.Year.ToString()+"-"+monthCalendar1.SelectionStart.Month.ToString().PadLeft(2,'0')+"-"+"01"
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-20 19:12:48

切勿将SQL语句放在一起作为字符串!Remember Bobby表...

除此之外:

代码语言:javascript
复制
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:01lastOfMonth 23:59:59之间的条目。实际上,您应该从所选月份的第一个月到下一个月的第一个月进行查询,以获得所需的信息(减去一毫秒而不是一天是没有帮助的,因为SQL Server不能精确地存储毫秒)。

票数 0
EN

Stack Overflow用户

发布于 2012-04-20 19:06:54

代码语言:javascript
复制
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")+

使用此选项获取所选月份的最后一天

代码语言:javascript
复制
DateTime.DaysInMonth(dt.Year, dt.Month);

http://social.msdn.microsoft.com/Forums/en/Vsexpressvcs/thread/218260ec-b610-4fa6-9d1b-f56f3438b721

票数 0
EN

Stack Overflow用户

发布于 2012-04-20 18:49:10

代码语言:javascript
复制
    DateTime startDate = DateTime.Parse("03.04.2012");

    DateTime firstofMonth = new DateTime(startDate.Year, startDate.Month, 1);

    DateTime endOfMonth = firstofMonth.AddMonths(1).AddDays(-1);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10244606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档