Domanda

Voglio memorizzare un C # .NET ulong in un database T-SQL. Non vedo alcuna disposizione per fare questo, come il bigint SQL ha gli stessi valori Min / Max come long normale.

C'è un modo che io possa fare questo? O è di prendere un OverflowException la mia unica speranza?

È stato utile?

Soluzione

Questo dovrebbe rispondere alla tua domanda:

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

Si potrebbe utilizzare BigInt, basta essere attenti a come si converte il tipo di nuovo firmato in un tipo senza segno in C #

// This has not been tested
unchecked
{
    myUlong = myDataReader.GetInt64(...);
}

...

L'altra possibilità è quella di utilizzare VarBinary con una lunghezza di 8, quindi convertire i byte di un ulong in C #

Altri suggerimenti

Lo so che non è la stessa, ma sarebbe questo fare:

select convert(decimal(38, 0), 12345678901234567890123456789012345678)

Il massimo per un unsigned sembra lungo per essere 18.446.744.073.709.551.615 che è significativamente inferiore a tale cifra decimale in grado di memorizzare. Ci potrebbero essere problemi di conversione, ma sono sicuro che un paio di funzioni wrapper nell'applicazione avrebbe risolto abbastanza rapidamente.

Per me la soluzione di Neil N non ha funzionato. Visual Studio continuava a lamentarsi che non posso assegnare un valore a una variabile long ulong, non importa il unchecked.

Che cosa ha fatto il lavoro alla fine era semplicemente

ulong fileSize = (ulong)(long)reader["fileSize"];

(withoutunchecked).

Nel SQLite DB il valore viene memorizzato come long, quindi valori molto elevati diventano negativi e ordinamento in SQL lato fallisce. Ma dopo aver ottenuto i valori ulong LINQ può fare la sua magia

items = items.OrderByDescending(x => x.FileSize).ToList();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top