Can T-SQL negozio ulong di?
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?
Soluzione
Questo dovrebbe rispondere alla tua domanda:
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();