【问题标题】:How to correctly recover date from SQL Server?如何从 SQL Server 中正确恢复日期?
【发布时间】:2017-06-05 20:09:12
【问题描述】:

我使用 ASP.NET MVC 创建了一个简单的 CRUD,并且可以正常保存我的寄存器。 如果我查看数据库,我的日期是这样存储的:

2017-06-01 00:01:23.750

但是当我尝试使用 MVC 脚手架创建的异步方法编辑同一个寄存器时,日期似乎为空:

01/01/0001 00:00:00

然后(当然)我得到一个错误:

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

这就是异步方法:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Edit([Bind(Include = "ArtigoId,Titulo,Texto,DataPublicacao,UltimaModificacao,UsuarioModificacao,DataCriacao,UsuarioCriacao")] Artigo artigo)
{
    if (ModelState.IsValid)
    {
        db.Entry(artigo).State = EntityState.Modified;
        await db.SaveChangesAsync();
        return RedirectToAction("Index");
    }
    return View(artigo);
}

为什么会这样?如何从数据库中正确恢复日期?

编辑:

我在数据库中更改了 datetime2(0-7) 但这使它接受了值 01/01/0001 00:00:00 我想知道为什么这个值出现而不是 2017-06-01 00:01:23.750.

数据库中的所有其他值都正常恢复,但不是这个日期。

【问题讨论】:

  • datetime 不支持0001-01-01。在您的数据库中使用datetime2(0-7) 数据类型。或者将0001-01-01 替换为实际的null 值而不是最小值。
  • sql server 中的日期仅从 01/01/1900 开始有效
  • @SqlZim 我在 DB 中更改了datetime2(0-7) 但这使它接受了值01/01/0001 00:00:00,我想知道为什么这个值出现而不是2017-06-01 00:01:23.750

标签: c# sql-server asp.net-mvc date


【解决方案1】:

出现问题是因为我在视图中删除了我的字段,并且与 SQL Server 中的日期格式无关。

我将该字段作为readyonly放回视图

<div class="form-group">
    @Html.LabelFor(model => model.DataCriacao, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EditorFor(model => model.DataCriacao, new { htmlAttributes = new { @class = "form-control", @readonly = "readonly" } })
        @Html.ValidationMessageFor(model => model.DataCriacao, "", new { @class = "text-danger" })
    </div>
</div>

数据库中字段的搜索是在GET方法中完成的:

// GET: Artigos/Edit/5
public async Task<ActionResult> Edit(Guid? id)
{
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    Artigo artigo = await db.Artigoes.FindAsync(id);
    if (artigo == null)
    {
        return HttpNotFound();
    }
    return View(artigo);
}

我发布的方法是提交按钮以保存更改后的 POST,并且没有对数据库进行任何搜索。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 2013-11-02
    • 1970-01-01
    • 2016-11-21
    相关资源
    最近更新 更多