这发生在今天,它是最奇怪的事情。
我使用Entity Framework + LINQ来插入数据库值。有一个日期时间列,它一直工作到2016/04/01。
今天,当我插入一些行并尝试选择它们时:
Where BulletingDate = Convert(DateTime, '2016-03-01 00:00:00')
这有效,但不知何故,当我试图用这个插入值时:
a.BulletingDate = DateTime.Parse(txtBulletinDate.Text);
entities.Auctions.Add(a);
entities.SaveChanges();
它添加日期时间,如:2016-01-04 00:00:00.000
但公告日期文本是:2016-04-01 00:00:00
我似乎无法弄清楚。
请帮助。
答案 0 :(得分:1)
日期格式非常脆弱;对于您认为正在运行YYYY-MM-DD的查询,您可以非常轻松地突然开始执行YYYY-DD-MM或类似操作,而不是像登录终端的其他用户那样轻微。
不要依赖于传递到数据库的日期,因为字符串的解析完全符合您的预期。将它们作为日期对象传递,您将获得更好的结果。
答案 1 :(得分:0)
datetime type in SQL Server使用小数秒。那是最终的.000。
如果可以,我建议切换到datetime2 in SQL Server 2008 and up,其中可选小数秒。如果您不需要跟踪一秒的分数,那么您可以使用datetime2(0)。它与C#DateTime很好地配合使用。
答案 2 :(得分:0)
像这样布置你的日期时间对象
DateTime x = new DateTime(2016,01,04); //年月日
所以在将它传递给实体框架时没有问题
如果你的字符串是这种格式" 20140104 00:00:00"你应该也很安全(至少MSSQL对这种格式没有问题,不确定C#是否也很酷)