The conversion of a datetime2 data type to a datetime data type Error

64,394

Solution 1

The error is because you haven't actually set those values correctly, make sure you set them depending on your applications locale. (e.g. dd/mm/yyyy for en-GB, mm/dd/yyyy for en-US).

It also looks like your database has been set up to use a datetime2 column and not a datetime column.

You can either:

A) Modify the database to change the type from datetime2 to datetime

B) Change the types in your Model to be datetime2, by doing:

[Column(TypeName = "DateTime2")]
public DateTime StartTime { get; set; }

[Column(TypeName = "DateTime2")]
public DateTime EndTime { get; set; }

Solution 2

I had the same problem when I tried to save an unassigened DateTime member to the DB, while using EntityFramework. I read the answers here, and I learned that it can be solved by declaring the member as nullable. I tried it, and it worked! So here is a code snap, for those who need it:

public Nullable<DateTime> MyDateTime { get; set; }

or

public DateTime? MyDateTime { get; set; }

Later I could use it like bellow:

if(MyDateTime.HasValue)
{
    DoBlaBla(MyDateTime.Value);
}

or just assign a value to it like nothing had happen...

MyDateTime = DateTime.Now;

Solution 3

Does your columns with datetime2 datatype accepts null values. If not then you might get this error when you are not assigning a value to these columns.

By default the CodeFirst will make non nullable columns if your model does not use nullable properties. Try converting these properties to nullable datetime.

Share:
64,394
Alexandra Orlov
Author by

Alexandra Orlov

Updated on July 09, 2022

Comments

  • Alexandra Orlov
    Alexandra Orlov almost 2 years

    I have a controller:

    [HttpPost]
    public ActionResult Create(Auction auction)
    {
        var db = new EbuyDataContext();
        db.Auctions.Add(auction);
        db.SaveChanges();
        return View(auction);
    }
    

    A model:

    public class Auction
    {
            public long Id { get; set; }
            public string Title { get; set; }
            public string Description { get; set; }
            public decimal StartPrice { get; set; }
            public decimal CurrentPrice { get; set; }
            public DateTime StartTime { get; set; }
            public DateTime EndTime { get; set; }}
    }
    

    And a view:

    @model Ebuy.Website.Models.Auction
    @using (Html.BeginForm())
    {
        <p>
            //All the information fields...
            @Html.LabelFor(model => model.EndTime)
            @Html.EditorFor(model => model.EndTime)
        </p>
    }
    

    When I try to run it I receive the error:

    The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.

    The model-controller-view is from a book copied one-to-one.

    What is the format that I need to enter to the EndTime field so I won't have this error?