SQL Query

时间:2016-04-08 16:21:47

标签: c# sql-server linq datetime

这发生在今天,它是最奇怪的事情。

我使用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

我似乎无法弄清楚。

请帮助。

3 个答案:

答案 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#是否也很酷)