sql server current_timestamp vs c#datetime.now

时间:2012-11-28 12:13:03

标签: c# .net sql-server datetime nunit

sql server获取当前时间的方式和c#编译器获取它的方式可能有所不同吗?

我在sql server表中有一个触发器,每次更新时updateDatetime列都会更新为当前日期时间。

我使用current_timestamp

获取当前日期时间

我还有一个连接到这个数据库的c#代码,并使用本机sql更新表,之后将创建触发器。

问题是我在NUnit中运行测试,我在那里进行更新,然后检索更改的行。如果我在测试开始时将updatedDatetime与当前的那个进行比较,则它们是不同的。 我使用DateTime.UtcNow

执行此操作

差异只是毫秒,但有趣的是,从测试开始的那个发生在触发器之后!这没什么意义。

这里有一些代码来说明我在说什么

                DateTime dateTimeBefore = DateTime.UtcNow;

                // Act
                bookDao.Update(book);

                // Assert
                alteredBook = bookDao.GetByKey(bookingDao);


                Console.WriteLine("dateTimeBefore: {0} - {1}", dateTimeBefore, dateTimeBefore.Millisecond);
                Console.WriteLine("UpdateDateTime: {0} - {1}", alteredBook.UpdatedDateTime, alteredBook.UpdatedDateTime.Millisecond);

                Assert.IsTrue(alteredBook.UpdatedDateTime >= dateTimeBefore);

这将是触发器

update Book set UpdatedDatetime = current_timestamp from inserted where inserted.Id = Booking.Booking.Id

1 个答案:

答案 0 :(得分:1)

current_time“派生自运行SQL Server实例的计算机的操作系统”,datetime.now也是如此。如果你的单元测试在nunit和你的sql server实例在另一台机器上运行的机器上运行,那么这两个值的比较结果取决于每台机器的本地时间设置。

此外,即使在同一台机器中,两个值(sql server datetime type和datetime.now的current_timestamp)具有不同的精度 - Converting from DateTime to SqlDateTime is inaccurate