[Memo] C# 和 SQL Server 的 TimeStamp 处理

[Memo] C# 和 SQL Server 的 TimeStamp 处理


以前都是用 SSIS 和 SQL 语法搞定的,转 C# 之后花了很多时间 Debug 。原因就是因为明明知道数据库中是用 Binary 的方式处理但却偷懒随便 Google 找程序来套,浪费了很多时间。

都改了三版还是发现错误 ( 三次都用 Google 找 ) ,总之就是自已偷懒自找的。

因为上次用 TimeStamp 是快 8 年前的事,只依稀记得 SQL Server 的 timestamp 是序列的数字。但 google 后每个都说是“时间”,不然就是说长度太长的要缩减什么的。

最后,还是乖乖的自已验证 Binary 的格式

SQL Server 中取到的 TimeStamp Binary 内容 “00 00 00 00 00 00 0B B9”的数组放到变量中,还好以前是专门写金手指的作者所以知道有些的内容会倒著放,所以相反的数据也依序放入进行验证。

image

然后直接将数组用 BitConverter.ToInt64 处理并输出看结果

image

原本的数据格式出来的都是 负很大的数字,而只有倒著放才是正确出现的数字内容。

因此,只要数组先做了反转之后再用 BitConverter 转 long 就可以了。

不需要做任何的长度变更、也不需要做时分秒的数字相加,更不用做 Ulong 的设定。

范例程序

https://msdn.microsoft.com/zh-tw/library/system.bitconverter.toint64(v=vs.110).aspx

总结,明明自已验证一下只要花 10 分钟就搞定的事情,却绕了一大圈才真正修好。 还是记录一下警惕自已