Les années du magasin T-SQL?
Question
Je veux enregistrer un C # .NET ulong
dans une base de données T-SQL. Je ne vois pas de dispositions pour ce faire, comme l'bigint
SQL a les mêmes valeurs Min / Max comme long
normal.
Est-il possible que je peux le faire? Ou est attraper un OverflowException
mon seul espoir?
La solution
Cela devrait répondre à votre question:
Vous utilisez BigInt, il vous suffit de faire attention à la façon dont vous convertissez le dos de type signé dans un type non signé en C #
// This has not been tested
unchecked
{
myUlong = myDataReader.GetInt64(...);
}
...
L'autre possibilité est d'utiliser VarBinary avec une longueur de 8, puis convertir les octets à un ulong en C #
Autres conseils
Je sais que ce n'est pas la même chose, mais je cela:
select convert(decimal(38, 0), 12345678901234567890123456789012345678)
Le maximum pour un unsigned long semble être 18.446.744.073.709.551.615 ce qui est nettement inférieur à cette décimale peut stocker. Il pourrait y avoir des problèmes de conversion, mais je suis sûr que quelques fonctions wrapper dans votre application trierait assez rapidement.
Pour moi, la solution de Neil N ne fonctionnait pas. Visual Studio se plaignant gardé que je ne peux pas attribuer une valeur long
à une variable ulong
, peu importe le unchecked
.
Qu'est-ce que le travail à la fin était tout simplement
ulong fileSize = (ulong)(long)reader["fileSize"];
(withoutunchecked
).
Dans le DB SQLite la valeur est mémorisée en tant long
, de sorte que des valeurs très élevées deviennent négatifs et les trier sur SQL échoue à côte. Mais après avoir obtenu les valeurs de ulong
Linq peut faire sa magie
items = items.OrderByDescending(x => x.FileSize).ToList();