1

我有数据库,我使用 SQL 查询从中获取数据到我的 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 查询,所以当我选择四月的一天时,我得到了这个:

between '2012-04-01' and '2012-04-30'

?

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

monthCalendar1.SelectionStart.Year.ToString()+"-"+monthCalendar1.SelectionStart.Month.ToString().PadLeft(2,'0')+"-"+"01"
4

3 回答 3

0
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-20T11:06:53.713 回答
0

永远不要把你的 SQL 语句作为字符串放在一起!记住鲍比桌...

除此之外:

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:01and之间的任何条目lastOfMonth 23:59:59。实际上,您应该从所选月份的第一天到下个月的第一天查询以获得所需的信息(减去一毫秒而不是一天将没有帮助,因为 SQL Server 无法准确存储毫秒)。

于 2012-04-20T11:12:47.530 回答
-1
    DateTime startDate = DateTime.Parse("03.04.2012");

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

    DateTime endOfMonth = firstofMonth.AddMonths(1).AddDays(-1);
于 2012-04-20T10:49:10.300 回答