AddDays()方法错误c#

时间:2017-12-29 20:47:01

标签: c#

我使用方法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天后的日期 请帮帮我

2 个答案:

答案 0 :(得分:2)

将日期作为字符串传递时会出现这种问题。你不一定知道正确的格式是什么,听起来你的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)

答案 1 :(得分:0)

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

如果您选择不使用参数化查询,那么您的日期格式应与SQL服务器所期望的相匹配。