有人可以告诉我为什么这段代码会产生错误吗?SQL Server字符/ VarChar日期时间错误
C#代码
DateTime now = DateTime.Now;
DateTime after1month = DateTime.Now.AddMonths(1);
查询它产生
SELECT * FROM TABLE WHERE THEDATE BETWEEN 'now' AND 'after1month'
任何帮助理解。 Thx
有人可以告诉我为什么这段代码会产生错误吗?SQL Server字符/ VarChar日期时间错误
C#代码
DateTime now = DateTime.Now;
DateTime after1month = DateTime.Now.AddMonths(1);
查询它产生
SELECT * FROM TABLE WHERE THEDATE BETWEEN 'now' AND 'after1month'
任何帮助理解。 Thx
这应该看起来更像是这样的:
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的功能,它允许一个specyfic间隔添加到日期和返回。
在这种情况下,dateadd(mm, 1, getdate())
在当前日期时间(getdate()
)上增加了一个(1
)月份(mm
)。有关datepart标识符的更多信息,并在MSDN dateadd上自行运行。
我觉得'now'和'after1month'是你在查询中使用的变量。这些变量的数据类型是什么?您需要将其转换为日期时间类型。使用SQL服务器的Convert或Cast功能来执行此操作。
不,它们在这种情况下不是变量,因为单引号在那里。它被认为是字符串常量 – 2012-01-05 08:56:15
如果你不希望使用ADO然后使用直接SQL查询作为
SELECT * FROM TABLE WHERE THEDATE BETWEEN GETDATE() AND DATEADD(mm, 1, GETDATE())
这里DATEADD函数将在一个月用“毫米”参数添加到当月。
向我们展示创建并运行此查询的代码 – 2012-01-05 08:37:55
_你遇到什么错误?和_how_你创建你的查询? – Nailuj 2012-01-05 08:38:18
C#代码不生成SQL,因此还有其他代码正在创建SQL(LINQ to SQL)。我们需要看到这一点。 – Richard 2012-01-05 08:38:40