Cast rowversion to bigint

前端 未结 2 2015
佛祖请我去吃肉
佛祖请我去吃肉 2021-01-18 06:33

In my C# program I don\'t want to work with byte array, therefore I cast rowversion data type to bigint:

SELECT CAST([version] AS BIGINT) FROM [dbo].[mytable         


        
2条回答
  •  难免孤独
    2021-01-18 07:23

    You can convert in C# also, but if you want to compare them you should be aware that rowversion is apparently stored big-endian, so you need to do something like:

    byte[] timestampByteArray = ... // from datareader/linq2sql etc...
    var timestampInt = BitConverter.ToInt64(timestampByteArray, 0);
    timestampInt = IPAddress.NetworkToHostOrder(timestampInt);
    

    It'd probably be more correct to convert it as ToUInt64, but then you'd have to write your own endian conversion as there's no overload on NetworkToHostOrder that takes uint64. Or just borrow one from Jon Skeet (search page for 'endian').

提交回复
热议问题