2012-01-05 64 views
-6

有人可以告诉我为什么这段代码会产生错误吗?SQL Server字符/ VarChar日期时间错误

C#代码

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

查询它产生

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

任何帮助理解。 Thx

+0

向我们展示创建并运行此查询的代码 – 2012-01-05 08:37:55

+0

_你遇到什么错误?和_how_你创建你的查询? – Nailuj 2012-01-05 08:38:18

+2

C#代码不生成SQL,因此还有其他代码正在创建SQL(LINQ to SQL)。我们需要看到这一点。 – Richard 2012-01-05 08:38:40

回答

5

这应该看起来更像是这样的:

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上自行运行。

+0

@Michael能否详细说明这个_dateadd_关键字? – rofans91 2012-01-05 08:51:04

+0

@ Rofans.NET只要尝试搜索http://www.google.lt/search?q=sql+server+dateadd – Reniuz 2012-01-05 08:54:51

+0

@ Rofans.NET检查我的编辑。 – 2012-01-05 09:00:16

0

我觉得'now'和'after1month'是你在查询中使用的变量。这些变量的数据类型是什么?您需要将其转换为日期时间类型。使用SQL服务器的Convert或Cast功能来执行此操作。

+1

不,它们在这种情况下不是变量,因为单引号在那里。它被认为是字符串常量 – 2012-01-05 08:56:15

2

如果你不希望使用ADO然后使用直接SQL查询作为

SELECT * FROM TABLE WHERE THEDATE BETWEEN GETDATE() AND DATEADD(mm, 1, GETDATE()) 

这里DATEADD函数将在一个月用“毫米”参数添加到当月。