【问题标题】:The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value. The statement has been terminated将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围。该语句已终止
【发布时间】:2019-05-23 20:43:59
【问题描述】:

我的模型中有以下代码

public int Id { get; set; }

    [Required]
    [StringLength(255)]
    public string Name { get; set; }

    public DateTime DateAdded { get; set; }

    [Display(Name = "Release Date")]
    public DateTime ReleaseDate { get; set; }

    [Display(Name = "Number in Stock")]
    public byte NumberInStock { get; set; }

    public Genre Genre { get; set; }

    [Display(Name = "Genre")]
    [Required]
    public byte GenreId { get; set; }

这是我的控制器编码器错误点显示

[HttpPost]
    public ActionResult Create(Movie movie)
    {
        _context.Movies.Add(movie);
        _context.SaveChanges();

        return RedirectToAction("Index", "Movies");
    }

这就是风景

<div class="form-group">
    @Html.LabelFor(m => m.Movie.ReleaseDate)
    @Html.TextBoxFor(m => m.Movie.ReleaseDate, "{0:d MMM yyyy}", new { @class = "form-control" })
</div>
<div class="form-group">
    @Html.LabelFor(m => m.Movie.GenreId)
    @Html.DropDownListFor(m => m.Movie.GenreId, new SelectList(Model.Genres, "Id", "Name"), "Select Movie Genre", new { @class = "form-control" })
</div>
<div class="form-group">
    @Html.LabelFor(m => m.Movie.NumberInStock)
    @Html.TextBoxFor(m => m.Movie.NumberInStock, new { @class = "form-control" })
</div>

<button type="submit" class="btn btn-primary">Save</button>

当我点击提交按钮时,我得到一个错误:

将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围。

对这个问题有任何想法吗?我假设这是一个日期时间问题,但我无法解决问题。我是这方面的初学者。

【问题讨论】:

标签: c# asp.net-mvc-5


【解决方案1】:

日期时间列“DateAdded”在 sql 中标记为 Not Nullable

选项 1(更改控制器):

[HttpPost]
public ActionResult Create(Movie movie)
{
    //setdate
    movie.DateAdded = Datetime.Now;
    _context.Movies.Add(movie);
    _context.SaveChanges();

    return RedirectToAction("Index", "Movies");
}

选项 2(更改模型)

public class Movie 
{
    public int Id { get; set; }

    [Required]
    [StringLength(255)]
    public string Name { get; set; }

    public DateTime DateAdded { get; set; } = Datetime.Now;

    [Display(Name = "Release Date")]
    public DateTime ReleaseDate { get; set; }

    [Display(Name = "Number in Stock")]
    public byte NumberInStock { get; set; }

    public Genre Genre { get; set; }

    [Display(Name = "Genre")]
    [Required]
    public byte GenreId { get; set; }
}

【讨论】:

  • 非常感谢。你拯救了我的一天。这是否使列可以为空?
  • 您也可以在数据库中使 DateAdded 可以为空,但我认为在这种情况下这并不明智。选项 1 和 2 不会使数据库中的列可以为空。选项 1 只是在您 SaveChanges 之前将 DateAdded 填充到 Now,而选项 2 在您实例化 Movie 时将默认日期设置为 Datetime.Now(而不是 NULL)。您还可以在 sql 中将默认日期设置为 GETDATE() 作为另一个选项。只是想给你一些选择,这样你就可以决定什么最适合你的情况!过去我被这件事难住了,感受到你的痛苦。
猜你喜欢
  • 2011-04-07
  • 2011-11-15
  • 1970-01-01
  • 2010-11-22
相关资源
最近更新 更多