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

asp.net-mvc c# datetime entity-framework

Question

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?

1
11
11/15/2015 9:04:36 PM

Accepted Answer

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; }
22
1/13/2014 9:30:40 PM

Popular Answer

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;


Related Questions





Related

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow