将天数添加到DateTime返回值0

本文关键字:DateTime 返回值 添加 | 更新日期: 2023-09-27 18:24:09

此代码统计MSSQL表中日期介于今天的日期和今天的日期+8天之间的记录数,但它不起作用;它返回值0,但2是正确的答案。

如果我将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");
}

将天数添加到DateTime返回值0

不要将日期/时间视为字符串。只是:
command.Parameters.AddWithValue("@date", DateTime.Now);
command.Parameters.AddWithValue("@dateadd", DateTime.Now.AddDays(8));

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

请注意,您实际上是在毫无理由地执行它两次;您可以移除CCD_ 5。

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

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

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

2014年9月30日

八天后,是十月,日期如下:

2014年10月1日

流行问答:01/10/2014是指10月1日,还是1月10日?很明显,你的意思是指10月1日,但世界上的一些地方(可能还有Sql Server)会把它读成1月10日。

这里的解决方案是您不应该将日期参数作为字符串传递在这种情况下,完全删除.ToString()调用可能就足以修复它,但我更喜欢明确我的数据库类型:

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

当然,上面的修复程序假设您已经在数据库中做了正常的事情。您可能犯了一个错误,首先将日期存储为varchar字段。如果你这样做了,Sql Server会将你的字段作为字符串进行比较,并且根据你的示例格式,月初的任何内容都是,总是将在月晚些时候的日期之前排序,即使是在不同的月份。这意味着您的示例结束日期早于开始日期。如果这是您的问题,您需要在表中添加一个新的Date列,并编写代码用转换后的日期值更新行。您可能需要将其与修复应用程序中在此字段上插入、更新和选择的其他部分相协调。

要吸取的主要教训是:永远不要把日期当作字符串这适用于应用程序的每个级别(表示层除外)。