2014-09-23 26 views
2

此代码计算日期在今天日期和今天日期+8天之间的MSSQL表中的记录数,但不起作用;它返回值为0,但2是正确答案。将日期添加到DateTime返回值0?

如果我将DateTime.Now.AddDays更改为7或更低,则它应如其操作。

//Ordre klar til bestilling 
command.CommandText = "SELECT COUNT(*) from bestillinger WHERE udlevering BETWEEN @date and @dateadd"; 
command.Parameters.AddWithValue("@date", DateTime.Now.ToString("dd/MM/yyyy")); 
command.Parameters.AddWithValue("@dateadd", DateTime.Now.AddDays(+8).ToString("dd/MM/yyyy")); 

con.Open(); 
command.ExecuteNonQuery(); 
string result0 = command.ExecuteScalar().ToString(); 

con.Close(); 
MessageBox.Show(result0); 

if (result0 != "0") 
{ 
    bestillingToolStripMenuItem.ForeColor = System.Drawing.ColorTranslator.FromHtml("#FF1919"); 
} 
+1

嗯,也许把'+'带出去。 – 2014-09-23 16:27:31

+6

@alykins抱歉,但事实并非如此; “+ 8”的意思与“8”完全相同。它仅仅是多余的,不是无效的。 – 2014-09-23 16:31:01

+0

这我不知道 - 谢谢澄清。 – alykins 2014-09-23 16:32:55

回答

12

不要将日期/时间视为字符串。只是:

command.Parameters.AddWithValue("@date", DateTime.Now); 
command.Parameters.AddWithValue("@dateadd", DateTime.Now.AddDays(8)); 

问题很可能是日期/时间格式。

请注意,您实际上无故执行了两次;您可以删除command.ExecuteNonQuery()。从现在

int count = (int)command.ExecuteScalar(); 
if(count != 0) { .... } 
+0

它不起作用! – user3888775 2014-09-23 17:58:18

+2

@作为语句几乎没用的用户。怎么了?和你期望发生的事情有什么不同?如果你得到一个不同的数字:是什么让你认为你的期望是正确的? (如果您经常将数据视为字符串,坦白地说,源数据是非常可疑的)。什么是列的数据类型? – 2014-09-23 18:08:38

+0

我怀疑他实际上是将日期存储为字符串,而不仅仅是试图以这种方式将它们发送到sql服务器:(呃。 – 2014-09-23 21:39:55

8

七天,它仍然是九月和日期如下::

最后,不要把整数作为字符串

30/09/2014

从现在开始的八天,现在是十月,日期看起来像这样:

2014年1月10日

突击测验:不01/10/2014指10月1日或1月10日?显然,你的意思是指10月1日,但世界的一部分(也可能是Sql Server)会在1月10日之后读取它。

这里的解决方案是,你不应该将日期参数作为字符串传递!刚取出.ToString()通话完全可能是不足以解决它在这种情况下,但I prefer to be explicit about my database types

command.Parameters.Add("@date", SqlDbType.DateTime).Value = DateTime.Today; 
command.Parameters.Add("@dateadd", SqlDbType.DateTime).Value = DateTime.Today.AddDays(8); 

当然,上述修复假设你已经完成了在数据库中理智的事情。你可能犯了个错误,把你的日期作为varchar字段放在第一位。如果你这样做了,Sql Server将你的字段作为字符串进行比较,并且根据你的示例格式,本月初任何东西都是总是将在本月晚些时候的日期之前排序,即使在不同的月份也是如此。这意味着您的示例结束日期在您的开始日期之前来到。如果这是您的问题,则需要向表中添加新的日期列,然后编写代码以使用转换后的日期值更新行。您可能需要协调此问题,修复应用程序的其他部分,这些部分插入,更新和选择此字段。

主要课程带走这个:永远不要把日期当作字符串!这适用于级别的应用程序,除了表示层。