代码之家  ›  专栏  ›  技术社区  ›  Anthony Forloney

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

  •  22
  • Anthony Forloney  · 技术社区  · 16 年前

    我有一个ASP.NET MVC应用程序,其中我正在编辑现有数据库以更新特定字段, DateTime 日期创建 日期修改 . 当我尝试更新字段时,我希望 日期创建 DateTime.Now

    这里是给定的代码,以防我做错了什么。这是我第一次使用ASP.NET MVC,所以请慢慢来。我在哪里见过其他答案 Context 被调用,但我找不到任何引用。当我运行应用程序时,我在标题和 contractEntity.SaveChanges() 它是红色的。

    public ActionResult Edit(Contract editContract) {
    var contract = (from c in contractEntity.Contracts where c.Id == editContract.Id select c).First();
    if (!ModelState.IsValid)
        return View(contract);
    // editContract.DateCreated = contract.DateCreated;
    // editContract.DateModified = DateTime.Now;
      contractEntity.ApplyCurrentValues(contract.EntityKey.EntitySetName, editContract);
      contractEntity.SaveChanges();
      return RedirectToAction("Index");
    }
    

    请,任何帮助都将不胜感激。谢谢。

    5 回复  |  直到 15 年前
        1
  •  38
  •   Colin Asquith    15 年前

    对我来说,我也有同样的问题,但问题是在默认情况下,当我保存模型时,创建了一个无效的日期时间。我有一个CreatedOn字段,但没有将其设置为任何值,这意味着该值为01/01/0001,这对于SQL来说是无效的日期时间。设置它为我解决了这个问题。

        2
  •  19
  •   Anthony Forloney    15 年前

    读后 this website 我发现要打开数据库的.edmx文件并进行更改:

    <...Provider="System.Data.SqlClient" ProviderManifestToken="2008".../>
    

    <...Provider="System.Data.SqlClient" ProviderManifestToken="2005".../>
    

        3
  •  12
  •   ΩmegaMan    11 年前

    您还可以编辑模型(或在.edmx中的EF中)并设置 StoreGeneratedPattern 为相关字段计算。这将导致它不会将其保存到该字段,因为它是由SQL server计算的。

        4
  •  7
  •   InterWAS    15 年前

    我也有同样的错误,我发现如果SQL 2008 DB中有一个DateTime可为Null的字段,不要在代码中显式地将Null(Nothing)赋值给该字段,这将导致此错误,或者可以将所有DateTime字段更改为DateTime2。

        5
  •  3
  •   Rushino    13 年前

    只需使用DateTime可为空的DateTime,比如DateTime?如果数据库中的列可以为空,则在域实体属性中。这将使它起作用。