2010-01-18 81 views
1

为了组织精简的基于数据库定时器的轮询,每更新一次数据库表,我需要更新SQL Server 2008数据库中的时间戳字段(然后轮询,读取其值,与前端的值进行比较,决定阅读整个表格)。如何读取WPF中更新SQL Server时间戳字段的系统时间?

关于这一切,我如何读取写时间戳的系统时间?使用什么数据格式的SQL Server字段(DataTime或Time)?以及如何比较这种格式的价值?

回答

2

您是否在讨论TIMESTAMP类型的数据库列?

这些都是二进制的时间戳SQL Server将在内部更新 - 他们什么都没有做的日期和/或时间 - 它只是一个二进制编码计数器,真的。这些字段由系统处理,并且它们可靠且非常准确 - 如果您想要某种乐观的并发锁定机制,请使用此字段类型。

如果你想要一个包含最后修改日期和时间的DATETIME字段,最好的选择是在该表上设置一个AFTER INSERT/AFTER UPDATE触发器,该触发器将最后更新列设置为当前日期/ SQL Server自动执行时间,而无需执行任何操作。

DATETIME在SQL Server 2005中精确到大约3.33ms - 在SQL Server 2008中,如果需要,可以将DATETIME2精确到100ns。因此,不要依赖DATETIME列来100%准确地检查是否有变化! 3.33ms的准确度可能会导致误导性的结果!

+0

Marc,感谢您的澄清!请问,请告诉,在wpf应用程序端使用什么c#数据类型来保存和比较TIMESTAMP类型的SQL Server? – rem 2010-01-18 10:06:53

+1

@rem:TIMESTAMP的“native”类型是byte [8] - 一个8字节的数组。由于它是8个字节,因此可以很容易地将它转换为服务器上的BIGINT(CAST(yourcol as BIGINT)),然后使用.NET类型'long'。 – 2010-01-18 11:20:28