【问题标题】:SQL Timestamp to datetime on C#SQL时间戳到C#上的日期时间
【发布时间】:2018-09-07 05:24:10
【问题描述】:

我的SQL 表中有以下列:

RECORDTIMESTAMP
0x000000000005B2A4
0x000000000005B2A5
0x000000000005B2A6

我需要在我的 C# 程序中返回这些值。这个属性是这样声明的:

public DateTime? RecordTimeStamp{ get; set; }

而我的获取方法是这样的:

RecordTimeStamp = DateTime.Parse(row["RecordTimeStamp"].ToString()),

错误信息如下:

  "The string was not recognized as a valid DateTime. There is an unknown word starting at index 0.",

我也尝试将属性声明为字符串,但也没有用。

对此有什么想法吗?

【问题讨论】:

标签: c# mysql sql asp.net-core


【解决方案1】:

这里有一个常见的误解:Timestamp 不是实际时间。

这是一个错误的命名。这就是为什么它在六个版本前被重命名为ROWVERSIONTimestamp 仅仍用作别名,带有明确的“已弃用”标记。从 https://docs.microsoft.com/en-us/sql/t-sql/data-types/rowversion-transact-sql:

timestamprowversion 数据类型的同义词,受数据类型同义词的行为影响。在 DDL 语句中,尽可能使用 rowversion 而不是 timestamp。如需更多信息,请参阅Data Type Synonyms (Transact-SQL)

Transact-SQL timestamp 数据类型不同于 ISO 标准中定义的 timestamp 数据类型。

注意

timestamp 语法已弃用。此功能将在 Microsoft SQL Server 的未来版本中删除。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。

【讨论】:

  • re SQL Server 特定位:OP 实际上将问题标记为mysql;当然,错误标记会发生,所以这种情况可能很好
【解决方案2】:

这看起来像一个 rowversion 列(它在历史上被称为“时间戳”列,尽管它不是时间的标记)。行版本不是一个时间——它只是一个不透明的单调递增整数,除了让你发现发生了变化之外没有任何意义。时间戳通常用于乐观并发检查,但没有实际意义。根据大小,longbyte[]string 可能适合存储。

【讨论】:

    猜你喜欢
    • 2012-06-18
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    相关资源
    最近更新 更多