Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DateTime错误地保存到我的数据库中_C#_Sql Server_Datetime - Fatal编程技术网

C# DateTime错误地保存到我的数据库中

C# DateTime错误地保存到我的数据库中,c#,sql-server,datetime,C#,Sql Server,Datetime,我很难理解为什么我的DateTime被错误地保存到我的数据库中 我将值20/12/2015(作为字符串)与格式(dd/MM/yyyy)一起传递给它,并将其解析为DateTime,但它总是以06/12/2015的形式保存到我的SQL Server数据库中 public ActionResult SaveSettings(ProjectPlan projectPlan) { projectPlan.StartDate = DateTime.ParseExact(projectPlan.Sh

我很难理解为什么我的
DateTime
被错误地保存到我的数据库中

我将值
20/12/2015
(作为字符串)与格式(
dd/MM/yyyy
)一起传递给它,并将其解析为
DateTime
,但它总是以
06/12/2015
的形式保存到我的SQL Server数据库中

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();
}

当您有
DateTime
对象时,文本表示不存储在服务器中,也不存储在.NET中。这只是一个从设定时间开始计算“”数的大数字


您将需要格式化日期。当您将日期选择回字符串时,插入方无法控制它(除非插入方也存储格式化字符串,或者您不将其存储为日期,而是将其存储为字符串)

Erm,您的意思是更新实体的
StartDate
属性,然后将其保存回数据库吗

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();
}
在这一行中,您基本上是在消除EF知道的所有上下文:

plan = projectPlan;

因此,如果您查看针对您的SQL数据库生成的实际SQL查询,您可能会注意到正好有0行被更新。

在设置
StartDate
后放置一个断点。那里的设置正确吗?如果确实是数据库存储问题,或者字符串的反序列化不正确,则这可能会缩小范围。@krillgar,直到我调用SaveChanges()时,日期时间都符合要求(2015年12月20日)数据库中的日期时间格式是什么?如果您能仔细检查一下,使用SQL探查器查看发送到数据库的内容,它可能会帮助您找到查找的位置。另外,在代码运行之前,数据库中的值是多少?有可能是2015年12月6日吗?这有什么关系:(?我的意思是,我使用EF创建一个对象,它跟踪更改,所以如果我更改属性或只是更改PBObject的引用,这有关系吗?是的,但基本上在您的代码示例中,您通过从数据库中获取变量,在第一行声明
plan
变量,然后在下一行用该变量完全替换该引用从您的操作参数开始计算。我刚刚测试了它,它是关于引用的:(.只要我做了
plan.Prop=proejctPlan.Prop
和plan.Prop2=projectPlan.Prop2`它就可以工作了!:sSo基本上您扔掉了查询数据库得到的
plan
实例(EF知道的那个)并将其替换为操作参数:
plan=projectPlan;
。不要忘记EF不知道关于
projectPlan
变量的任何信息,也不知道它如何跟踪它,当然除非您明确告诉它(对不起,我不记得关于EF的很多细节,关于如何将现有变量附加到当前会话)。是的,现在你这样说我明白了。我可以看到我做错了什么,只是不知道为什么错了!谢谢