MyDaftQuestions
MyDaftQuestions

Reputation: 4691

DateTime is saved incorrectly into my database

I'm struggling as why my DateTime is saved incorrectly into my database.

I pass it the value 20/12/2015 (as a string) alongside the format (dd/MM/yyyy) and parse it into a DateTime but it always saves into my SQL Server database as 06/12/2015

public ActionResult SaveSettings(ProjectPlan projectPlan)
{
     projectPlan.StartDate = DateTime.ParseExact(projectPlan.ShortDateTime, projectPlan.DateFormat, null); //ShortDateTime is 20/12/2015, DateFormat is dd/MM/yyyy
     var plan = this._dc.ProjectPlans.Single(a => a.Id == projectPlan.Id);
     plan = projectPlan;
     this._dc.SaveChanges();
}

Upvotes: 0

Views: 99

Answers (2)

Darin Dimitrov
Darin Dimitrov

Reputation: 1038710

Erm, didn't you mean updating the StartDate property of your entity and then saving it back into the database:

public ActionResult SaveSettings(ProjectPlan projectPlan)
{
     var plan = this._dc.ProjectPlans.Single(a => a.Id == projectPlan.Id);
     plan.StartDate = DateTime.ParseExact(projectPlan.ShortDateTime, projectPlan.DateFormat, null);
     this._dc.SaveChanges();
}

On this line you are basically killing every context EF knows about:

plan = projectPlan;

So if you looked at the actual SQL query generated against your SQL database you would have noticed that exactly 0 rows were updated.

Upvotes: 6

Scott Chamberlain
Scott Chamberlain

Reputation: 127543

The textual representation is not stored in the server, neither is it in .NET when you have a DateTime object. It is just a large number counting the number of "ticks" from a set time.

You will need to format the date when you select the date out back in to a string, the inserting side can't control it (unless the inserting side also stores the formatting string or you don't store it as a date and instead store it as a string)

Upvotes: 2

Related Questions