从datetime2数据类型到datetime数据类型的转换导致超出范围的值

卡梅伦

我的HomeController中有以下代码:

public ActionResult Edit(int id)
{
    var ArticleToEdit = (from m in _db.ArticleSet where m.storyId == id select m).First();
    return View(ArticleToEdit);
}

[ValidateInput(false)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Article ArticleToEdit)
{
    var originalArticle = (from m in _db.ArticleSet where m.storyId == ArticleToEdit.storyId select m).First();
    if (!ModelState.IsValid)
        return View(originalArticle);

    _db.ApplyPropertyChanges(originalArticle.EntityKey.EntitySetName, ArticleToEdit);
    _db.SaveChanges();
    return RedirectToAction("Index");
}

这是Edit方法的视图:

<% using (Html.BeginForm()) {%>

    <fieldset>
        <legend>Fields</legend>
        <p>
            <label for="headline">Headline</label>
            <%= Html.TextBox("headline") %>
        </p>
        <p>
            <label for="story">Story <span>( HTML Allowed )</span></label>
            <%= Html.TextArea("story") %>
        </p>
        <p>
            <label for="image">Image URL</label>
            <%= Html.TextBox("image") %>
        </p>
        <p>
            <input type="submit" value="Post" />
        </p>
    </fieldset>

<% } %>

当我按下“提交”按钮时,我收到错误消息:{"The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.\r\nThe statement has been terminated."}任何想法是什么问题?我假设edit方法正在尝试将数据库中的过帐值更新为已编辑的值,但是由于某种原因,它并不喜欢它。尽管我不明白为什么要涉及该日期,因为日期未提及控制器方法进行编辑?

雅各布

问题是您使用ApplyPropertyChanges的模型对象仅填充了表单(标题,故事和图像)中的数据。ApplyPropertyChanges将更改应用于对象的所有属性,包括未初始化的对象,该属性DateTime设置为0001-01-01,超出SQL Server的范围DATETIME

建议您不要使用ApplyPropertyChanges而是检索要修改的对象,更改表单编辑的特定字段,然后使用这些修改保存对象。这样,仅修改了字段。或者,您可以在页面中放置隐藏的输入,并填充其他字段,但这对并发编辑不是很友好。

更新:

这是一个未经测试的示例,仅更新了对象的某些字段(这是假设您正在使用LINQ to SQL):

var story = _db.ArticleSet.First(a => a.storyId == ArticleToEdit.storyId);
story.headline = ArticleToEdit.headline;
story.story = ArticleToEdit.story;
story.image = ArticleToEdit.image;
story.modifiedDate = DateTime.Now;
_db.SubmitChanges();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从datetime2数据类型到datetime数据类型的转换导致值超出范围

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

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

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

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

将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围。该语句已终止

ASP.NET MVC:将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围

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

varchar数据类型到datetime数据类型的转换导致值超出范围。SQL服务器

varchar数据类型到datetime数据类型的转换导致超出范围的值MVC5中的错误

从nvarchar数据类型到datetime数据类型的转换导致C#中的值超出范围

Varchar 到 datetime 数据类型转换导致值超出范围

将 varchar 数据类型转换为 datetime 数据类型导致 c# 中的值超出范围

即使没有datetime列,也得到“将varchar数据类型转换为datetime数据类型导致超出范围的值”

Azure MSSQL - 将 nvarchar 数据类型转换为日期时间数据类型导致值超出范围

错误:varchar 数据类型到日期时间数据类型导致错误值超出范围

MSSQL查询不再与Windows 10客户端一起使用:将varchar数据类型转换为datetime数据类型导致值超出范围

日期时间转换错误 - 将 varchar 数据类型转换为日期时间数据类型导致值超出范围

错误“将 varchar 数据类型转换为日期时间数据类型导致值超出范围。” 而存储日期格式是 dd-mm-yyyy

Laravel与SQL Server 2008抛出“将varchar数据类型转换为日期时间数据类型导致值超出范围”

MM/dd/yyyy 日期时间数据类型导致值超出范围

如何识别抛出列的System.Data.SqlClient.SqlException?(将datetime2数据类型转换为datetime数据类型)

sql 将 varchar 数据类型转换为超出范围的日期时间数据类型

SQL Server浮动数据类型超出范围

将varchar数据类型转换为日期时间。超出范围的错误

SQL Server代理中的错误:“将varchar数据类型与日期时间数据类型进行对话导致超出范围。”

SaveChangesAsync错误:DateTime2到DateTime超出范围的转换

如何使用EF Core,代码优先将自动分配的DateTime2数据类型更改为DateTime?

将 varchar 转换为 datetime 数据类型