I get the result in .NET like this:
var lastRowVersion = SqlHelper.ExecuteScalar(connStr, CommandType.Text, "select
top 1 rowversion from dbo.sdb_x_orginfo order by rowversion desc");
The result is a byte array [0]= 0,[1]=0,[2]=0,[3]=0,[4]=0,[5]=0,[6]=30,[7]=138
, but the result in SQL Server is 0x0000000000001E8A
.
How can I get the value "0x0000000000001E8A"
in .NET?
Here's an one-liner:
var byteArray = new byte[] { 0, 0, 0, 0, 0, 0, 30, 138 };
var rowVersion = "0x" + string.Concat(Array.ConvertAll(byteArray, x => x.ToString("X2")));
The result is:
"0x0000000000001E8A"
Just be aware that there are other options that perform better.
I found that the byte[] returned from sql server had the wrong Endian-ness and hence the conversion to long (Int64) did not work correctly. I solved the issue by calling Reverse on the array before passing it into BitConverter:
byte[] byteArray = {0, 0, 0, 0, 0, 0, 0, 8};
var value = BitConverter.ToUInt64(byteArray.Reverse().ToArray(), 0);
Also, I thought it better to convert to UInt64.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With