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”数据类型。 我知道Sql Server将时间戳存储为8字节的二进制文件,但这通常与.NET中的相同?

编辑添加:一些额外的信息……这是从我们的大型机上的DB2表返回的一行,来自Sql Server视图。 “Rowversion”不是一个选项,DB2正在将列作为时间戳处理。 如果timestamp和rowversion相同,也许我可以将它视为一个,但否则我会遇到时间戳。

再次编辑补充说:这个项目将让我疯狂。 它至少会是一次短途旅行。 无论如何,是的@JoelC这是一个Sql Server视图,进入大型机上的DB2数据库。 我终于能够找到我们的一位DBA,他们轻蔑地解释说“当然”DB2 TIMESTAMP在Sql Server视图中遇到日期时间。 根据他的语调,我猜只有新手不知道这一点。 这就是为什么他在实际视图中将其命名为“datetime”,Duh! (我在我的示例中给它一个不同的名称,以便不触发对命名约定的评论 – 实际的数据模型图表示它是TIMESTAMP并将其命名为时间戳)。 所以,在这种情况下,显然必须将其转换为DateTime。 我想我可能会开始考虑成为一名DBA,这样我也可以让程序员疯狂。 对不起,如果我误导了这个问题的任何响应者 – 这是无意的,因为我实际上期待时间戳是一个时间戳。 傻我。 特别感谢Microsoft将字节数组数据类型命名为“时间戳”,因为它与日期和时间无关。 我没有最简单的想法,哪个回应标记为答案。 叹。

Sql Server时间戳数据类型的名称令人困惑。 最好把它想象成版本号 – 那里没有日期/时间信息。 事实上,从Sql Server 2008开始,该类型被重命名为“rowversion”。

大多数情况下,你希望在Sql Server中使用datetime类型,它可以很容易地映射到C#中的DateTime,或者如果你有一个支持它的Sql Server版本,则可能是datetime2 。 时间戳类型的文档在这里:
http://msdn.microsoft.com/en-us/library/ms182776(v=sql.90).aspx

如果你真的必须按原样映射那个timestamp列,那么最接近的匹配可能是普通的旧版本(或者可能是ulong),但我不知道sql server如何处理字节顺序或者大/小内容与C#相比。

根据这篇文章

你必须将它强制转换为字节数组。

 byte[] dt = dataReader["dt"] as byte[]; 

它是一个byte[]Length8

从数据库中检索时

 string dt = Convert.ToBase64String(dataReader["dt"] as byte[]); 

进入数据库时

 new SqlParameter("@dt", Convert.FromBase64String(dt))