Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 比较C和SQL中GetDate()的DateTime.now的准确性_C#_Sql Server_Datetime - Fatal编程技术网

C# 比较C和SQL中GetDate()的DateTime.now的准确性

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都是新的

我要做的是,我需要选择最近通过DateTime添加的一行来获得PK,因为我需要它

我通过以下方式存储日期时间:

DateTime nw=DateTime.now,我使用nw搜索我的表

我的问题是,假设我在一分钟内放了两行,会怎么样? 我的sql表按如下方式存储它们:

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阻止可测试性。我相信你在这方面经验丰富,我愿意学习。你介意启发我吗?提前谢谢你!。