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?

Était-ce utile?

La solution

Cela devrait répondre à votre question:

http: / /social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/ff08c190-a981-4896-9542-3f64b95a84a2/

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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top