我有以下C#代码创建DateTime
,将其输入表中,然后查询该表:
DateTime date = DateTime.Now;
DateTest newRecord = new DateTest {
dateColumn = date
};
db.DateTest.AddObject(newRecord);
db.SaveChanges();
IQueryable<DateTest> records =
from d in db.DateTest
select d;
如果我此时破解代码,并查看调试器中的对象,我会得到date
对象:
Date {11/22/2011 12:00:00 AM} System.DateTime
Day 22 int
DayOfWeek Tuesday System.DayOfWeek
DayOfYear 326 int
Hour 8 int
Kind Local System.DateTimeKind
Millisecond 345 int
Minute 59 int
Month 11 int
Second 33 int
Ticks 634575491733450602 long
TimeOfDay {08:59:33.3450602} System.TimeSpan
Year 2011 int
我从表中检索到的记录中得到了这个:
Date {11/22/2011 12:00:00 AM} System.DateTime
Day 22 int
DayOfWeek Tuesday System.DayOfWeek
DayOfYear 326 int
Hour 8 int
Kind Unspecified System.DateTimeKind
Millisecond 347 int
Minute 59 int
Month 11 int
Second 33 int
Ticks 634575491733470000 long
TimeOfDay {08:59:33.3470000} System.TimeSpan
Year 2011 int
正如你所看到的,他们已经关闭了几毫秒。
任何人都可以解释为什么会这样,以及我如何解决它?我需要能够查询与内存中的DateTime
对象完全匹配的记录,但是这种行为导致我的查询空出来。
答案 0 :(得分:8)
SQL Server中DateTime
字段的分辨率与DateTime
.NET类的分辨率不同。
来自MSDN - datetime (Transact-SQL):
准确度:舍入为.000,.003或.007秒的增量
因此,在您的情况下,毫秒会向上舍入到.007
,而.3470000
代替.3450602
。
DateTime2
SQL Server数据类型的分辨率为100纳秒,如.NET,因此可能是合适的替代品。
答案 1 :(得分:5)
我认为这是因为您在数据库中使用了DateTime
列。它与.NET中的DateTime
类型的精度不同。请尝试在数据库中使用列类型DateTime2
。