T-Sql中的时间戳在C#中意味着什么?

问题描述

| 我正在尝试开发一个模型对象来保存Sql Server行,并且我完全理解除了T-Sql / SqlServer时间戳外如何执行此操作。该表定义为:
CREATE TABLE activity (
activity_id int,ip_address varchar(39),user_id varchar(255),message_text,dt timestamp
)
当我将表行解析为对象时,对于int或字符串,我希望执行以下操作:
ActivityID = (int)dataReader[\"activity_id\"];
IPAddress = (string)dataReader[\"ip_address\"];
但是,我该如何处理timestamp列?在任何地方都找不到\“ timestamp \”数据类型。我知道Sql Server将时间戳存储为8字节的二进制文件,但是在.NET中这通常等效于什么? 编辑添加:一些额外的信息...这是从大型机上的DB2表通过Sql Server视图返回的行。 \“ Rowversion \”不是一个选项,并且DB2将该列作为时间戳传递。如果时间戳和行版本相同,也许我可以将其视为一个,但否则我将受制于时间戳。 再次编辑以添加:该项目会让我发疯。至少将是一小段路程。无论如何,是的@JoelC这是大型机上DB2数据库的Sql Server视图。我终于能够找到我们的一个DBA,他轻描淡写地解释说,“当然”是将DB2 TIMESTAMP用作日期时间的Sql Server视图。从他的语气中,我猜只有菜鸟不知道这一点。这就是为什么他在实际视图中将其命名为“ datetime”,杜! (在示例中,我给它起了不同的名字,以免触发对命名约定的评论-实际的数据模型图说它是TIMESTAMP并命名为时间戳)。因此,在这种情况下,显然必须将其强制转换为DateTime。我想我可能会开始考虑成为一名DBA,以便我也能使程序员发疯。抱歉,如果我误导了任何对此问题的回答者,这不是故意的,因为我实际上希望时间戳记是一个时间戳记。傻我特别感谢Microsoft在与日期和时间无关的情况下,将字节数组数据类型命名为“时间戳”。我还没有哪个模糊的想法可以将答案标记为答案。叹。     

解决方法

        Sql Server时间戳数据类型的名称令人困惑。最好将它更像一个版本号,因为它在那里没有日期/时间信息。实际上,从Sql Server 2008开始,该类型已重命名为\“ rowversion \”。 在大多数情况下,您都希望在Sql Server中使用
datetime
类型,该类型可以轻松地映射到C#中的DateTime,或者如果您有支持SQL Server的版本,则可以将它映射到datetime2。有关时间戳类型的文档在这里: http://msdn.microsoft.com/zh-CN/library/ms182776(v=sql.90).aspx 如果您确实必须按原样映射该时间戳记列,则最接近的匹配可能是普通的旧
long
(也许是ulong),但是我不知道sql server如何处理字节顺序或大/小字节序vs C#。     ,        根据这篇文章 您必须将其转换为字节数组。
byte[] dt = dataReader[\"dt\"] as byte[];
    ,        是a5ѭ,with6ѭ是
8
。     ,        从数据库检索时
string dt = Convert.ToBase64String(dataReader[\"dt\"] as byte[]);
传入数据库时
new SqlParameter(\"@dt\",Convert.FromBase64String(dt))
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...