Comment lire les données de type timestamp depuis le serveur sql en utilisant C #?
- Je obtenir le résultat .NET comme ceci:
var lastRowVersion = SqlHelper.ExecuteScalar(connStr, CommandType.Text, "select
top 1 rowversion from dbo.sdb_x_orginfo order by rowversion desc");
Le résultat est un tableau d'octets [0]= 0,[1]=0,[2]=0,[3]=0,[4]=0,[5]=0,[6]=30,[7]=138
mais le résultat dans SQL Server est 0x0000000000001E8A
.
Comment puis-je obtenir la valeur "0x0000000000001E8A"
.NET?
source d'informationauteur user980447
Vous devez vous connecter pour publier un commentaire.
Si vous voulez convertir
byte[]
à unSystem.Int64
(akalong
) puis utiliserBitConverter.ToInt64
:Pour l'afficher comme une chaîne hexadécimale, vous pouvez utiliser le
X
spécificateur de formatpar exemple:J'ai trouvé que le byte[] retourné à partir de sql server eu la mauvaise Endian-ness et donc la conversion de long (Int64) ne fonctionne pas correctement. J'ai résolu le problème en appelant Revers sur le tableau avant de la passer dans BitConverter:
Aussi, j'ai pensé qu'il mieux convertir à UInt64.
Voici un one-liner:
Le résultat est:
Juste être conscient qu'il y a d'autres options qui fonctionnent mieux.
Vous pouvez utiliser la requête suivante qui sera de retour bigint au lieu de retourner hex.
select top 1 cast(rowversion as bigint) rowversion from dbo.sdb_x_orginfo order by rowversion desc
Même comme "Ashish Singh" je suis retourné à c# après la conversion de type bigint sur DB et utilisé Int64 sur le code côté.
La conversion de long/Int64/UInt64 en c#/VB a donné de mauvais résultats.(même après l'inversion de la matrice en raison de la little endian).
Attention sur la DB côté que RowVersion timestamp a MIN_ACTIVE_ROWVERSION() qui indique le dernier engage timestamp
Fonctionne très bien pour moi