C# 比较C和SQL中GetDate()的DateTime.now的准确性
我要做的是,我需要选择最近通过DateTime添加的一行来获得PK,因为我需要它 我通过以下方式存储日期时间: DateTime nw=DateTime.now,我使用nw搜索我的表 我的问题是,假设我在一分钟内放了两行,会怎么样? 我的sql表按如下方式存储它们:C# 比较C和SQL中GetDate()的DateTime.now的准确性,c#,sql-server,datetime,C#,Sql Server,Datetime,我要做的是,我需要选择最近通过DateTime添加的一行来获得PK,因为我需要它 我通过以下方式存储日期时间: DateTime nw=DateTime.now,我使用nw搜索我的表 我的问题是,假设我在一分钟内放了两行,会怎么样? 我的sql表按如下方式存储它们: insertDataToDataBase(data, DateTime.Now); 由于毫秒不可见,是否会同时选中它们?假设一切都发生在1分钟内 编辑:这是我的asp mvc项目。因此,每次运行我的操作时,DateTime都是新的
insertDataToDataBase(data, DateTime.Now);
由于毫秒不可见,是否会同时选中它们?假设一切都发生在1分钟内
编辑:这是我的asp mvc项目。因此,每次运行我的操作时,DateTime都是新的。如果您真的想使用DateTime。现在,使用第二精度作为查找数据主键的方法,您不应该声明一次,然后在任何地方使用它。相反,您应该这样使用它:
insertDataToDataBase(data, DateTime.Now);
然后10-20秒后
insertDataToDataBase(data, DateTime.Now); //still use DateTime.Now
这样你的DateTime.Now就会一直更新问题在于精度。TSQL中的函数的精度不如c DateTime,因为GetDate返回TSQL DateTime : 定义一个日期,该日期与一天中基于24小时时钟的分数秒时间相结合 四舍五入到.000、.003或.007秒的增量 : Ticks属性以十分之一秒为单位表示日期和时间值,毫秒属性返回日期和时间值的千分之一秒。但是,如果您使用重复调用DateTime.Now属性来测量经过的时间,并且您关心小于100毫秒的小时间间隔,则应注意DateTime.Now属性返回的值取决于系统时钟,在Windows 7和Windows 8系统上的分辨率约为15毫秒 但是,您可以使用SQL Server 2008的更新版本,该版本返回的datetime27值应与C Datetime的精度相匹配 : 定义一个日期,该日期与一天中基于24小时时钟的时间相结合。datetime2可以被视为现有datetime类型的扩展,该类型具有更大的日期范围、更大的默认小数精度和可选的用户指定精度 这仅仅在学术上很有趣,因为你永远不应该使用datetime作为PK 假设是2016年11月6日凌晨1:15。您可以创建一个记录:
MyPk
------
2016-11-06 01:15:00
一小时后,您创建了另一个记录
MyPk
------
2016-11-06 01:15:00
2016-11-06 01:15:00
由于夏令时,PKs重复。没有夏令时吗?不使用DateTime进行PK有很多原因,只需谷歌搜索DateTime作为主键即可
仅举几个例子:
准确的选择可能是非常困难的事情!
外键成了一场噩梦
除非所有系统都位于同一时区,否则复制非常困难
也许你的意思是1秒而不是1分钟,我延迟了10~20秒,他们都得到了日期时间值。我明白了,我明白了。。。这是因为您只声明了一次。对不起,我忘了声明这是来自我的.net应用程序,所以每个操作都有新的日期时间。我只是阅读了您的编辑。在这种情况下,这取决于您的查询方式。从技术上讲,你可以两者兼得。因此,最好先输入毫秒等附加信息,然后创建一个复合密钥。使用DateTime。现在以这种方式阻止可测试性。@ErikPhilips阻止可测试性。我相信你在这方面经验丰富,我愿意学习。你介意启发我吗?提前谢谢你!。