AddDays()方法c#出错[关闭]

Posted

技术标签:

【中文标题】AddDays()方法c#出错[关闭]【英文标题】:error with AddDays() method c# [closed] 【发布时间】:2017-12-29 20:47:01 【问题描述】:

我使用 adddays() 方法计算从今天起 7 天和 28 天后的日期,或者当我尝试将值插入数据库表字段 currect_date 和 crush_date 日期类型字段时的任何日期,它显示 adddays(28) 值是不是正确的日期/时间值。

DateTime d = new DateTime();
        d = DateTime.Today;
        cmd = new SqlCommand("insert into sq_crush (currect_date,crush_date) values ('" + d.AddDays(7).ToShortDateString() + "','" + d.AddDays(28).ToShortDateString() + "')", cn);
        if (cn.State == ConnectionState.Closed)
            cn.Open();
        // MessageBox.Show(dd);
        cmd.ExecuteNonQuery();

如果我将 28 更改为 14,它可以正常工作,但如果我使用超过 14 的任何值,它会显示相同的错误 “从字符串转换日期和/或时间时转换失败。” 如何使其工作,因为它适用于 14 以下的值,以及是否有任何其他方法可以获取 28 或 23 之后或某个特定日期之后的任意天数的日期。

一般来说,我想在三个字段中插入日期,第一个是今天,第二个是从第一个日期算起 7 天后的日期,我对此没有任何问题,最后一个是 28 天后的日期 请帮帮我

【问题讨论】:

阅读错误消息 - 是什么让您认为更改 AddDays() 值与转换有关?你为什么要传递日期值的字符串? 【参考方案1】:

当您将日期作为字符串传递时,就会出现这种问题。您不一定知道正确的格式是什么,听起来您的 SQL Server 不同意月份的位置(在字符串中的第一位或第二位);当您提供的日期太高而不能成为一个月时,SQL Server 会引发错误。

您可以通过将日期作为 DateTime 参数传递来避免整个问题(以及其他问题),如下所示:

DateTime d = DateTime.Today;
var sql = "insert into sq_crush (currect_date,crush_date) values (@date1,@date2)";
var cmd = new SqlCommand(sql, cn);
cmd.Parameters.AddWithValue("@date1", d.AddDays(7));
cmd.Parameters.AddWithValue("@date2", d.AddDays(28));
if (cn.State == ConnectionState.Closed)
    cn.Open();
cmd.ExecuteNonQuery();

通常是bad idea to concatenate strings to form SQL (link)。

【讨论】:

【参考方案2】:

那是因为 14 天会让你超过 12 天。因此,假设您提供的格式与 SQL 服务器认为您提供的格式不同。

如果您选择不使用参数化查询,那么您的日期格式应该与 SQL Server 的预期相匹配。

【讨论】:

12 号以后是什么? 嗯……一年只有 12 个月。因此,SQL 服务器必须认为您的日子是在值 12 之后的几个月。这就是您应该格式化日期或使用参数化查询的原因。您可以使用带有格式的 ToString 来匹配 SQL 服务器期望的格式,通常是 ToString("yyyy-MM-dd") 请记住,15 天后是 1 月 13 日。但是从现在开始的 14 天是 1 月 12 日,这就是为什么您在 14 天之后会遇到问题,因为它认为 13 天是月份字段而不是日期字段。 如果它需要 14 作为一个月,它会自动将年份更改为 2019 这不是问题我使用 d.adddays(28) 作为 message 和 label.text 的字符串值或任何它28 天后正确显示日期,但当我尝试将其插入 dB 时,显示错误

以上是关于AddDays()方法c#出错[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

LINQ to Entities 中使用的 AddDays 在除一台服务器之外的所有服务器中引发错误

C#有关日期的使用方法

powershell 定时删除脚本

jquery 时间运算格式化的方法扩张

Qt-QComboBoxg清空所有的方法

jquery 时间运算格式化的方法扩张