SQL Server Char / VarChar DateTime错误

时间:2012-01-05 08:35:55

标签: c# sql sql-server

有人可以告诉我为什么这段代码会产生错误吗?

C#代码

DateTime now = DateTime.Now;
DateTime after1month = DateTime.Now.AddMonths(1);

它产生的查询

SELECT * FROM TABLE WHERE THEDATE BETWEEN 'now' AND 'after1month' 

感谢任何帮助。 THX

3 个答案:

答案 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功能来执行此操作。