有人可以告诉我为什么这段代码会产生错误吗?
C#代码
DateTime now = DateTime.Now;
DateTime after1month = DateTime.Now.AddMonths(1);
它产生的查询
SELECT * FROM TABLE WHERE THEDATE BETWEEN 'now' AND 'after1month'
感谢任何帮助。 THX
答案 0 :(得分:6)
这应该更像是这样:
DateTime now = DateTime.Now;
DateTime after1month = DateTime.Now.AddMonths(1);
SqlCommand cmd = new SqlCommand("SELECT * FROM TABLE WHERE THEDATE BETWEEN @now AND @after1month", connection);
cmd.Parameters.Add(new SqlParameter("@now", System.Data.SqlDbType.DateTime).Value = now);
cmd.Parameters.Add(new SqlParameter("@after1month", System.Data.SqlDbType.DateTime).Value = after1month);
有时您可以使用查询直接在SQL Server端执行此操作:
SELECT * FROM TABLE WHERE THEDATE BETWEEN getdate() AND dateadd(mm, 1, getdate())
没有来自.NET的参数。
已添加(评论后):
dateadd
是一个SQL Server函数,允许添加特定日期并返回它。
在这种情况下,dateadd(mm, 1, getdate())
会将一个(1
)月(mm
)添加到当前日期时间(getdate()
)。有关datepart标识符的更多信息以及MSDN dateadd上的函数本身。
答案 1 :(得分:3)
如果您不想使用ADO,请使用直接SQL查询
SELECT * FROM TABLE WHERE THEDATE BETWEEN GETDATE() AND DATEADD(mm, 1, GETDATE())
此处DATEADD函数将使用'mm'参数将当月增加一个月。
答案 2 :(得分:1)
我认为'now'和'after1month'是您在查询中使用的变量。这些变量的数据类型是什么?您需要将其强制转换为日期时间类型。使用SQL Server的Convert或Cast功能来执行此操作。