The conversion of a datetime2 data type to a datetime data type Error
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.
Alexandra Orlov
Updated on July 09, 2022Comments
-
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?