Может ли T-SQL хранить улонг?
Я хочу сохранить С#.NET ulong
в базу данных T-SQL. Я не вижу никаких положений для этого, поскольку SQL bigint
имеет те же минимальные/максимальные значения, что и обычный long
.
Есть ли способ сделать это? Или ловить OverflowException
мою единственную надежду?
Ответы
Ответ 1
Это должно ответить на ваш вопрос:
http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/ff08c190-a981-4896-9542-3f64b95a84a2/
Вы бы использовали BigInt, вам просто нужно быть осторожным в том, как вы конвертируете подписанный тип обратно в неподписанный тип в С#
// This has not been tested
unchecked
{
myUlong = myDataReader.GetInt64(...);
}
...
Другая возможность - использовать VarBinary с длиной 8, затем преобразовать байты в ulong в С#
Ответ 2
Я знаю, что это не то же самое, но будет ли это делать:
select convert(decimal(38, 0), 12345678901234567890123456789012345678)
Максимальное значение для unsigned long, по-видимому, составляет 18 446 744 073 709 551 615, что значительно меньше, чем это десятичное число. Могут быть проблемы с преобразованием, но я уверен, что несколько функций-оболочек в вашем приложении будут сортировать их довольно быстро.
Ответ 3
Для меня решение Neil N не сработало. Visual Studio постоянно жаловалась, что я не могу присвоить long
значение переменной ulong
, независимо от того, unchecked
.
То, что сработало в конце, было просто
ulong fileSize = (ulong)(long)reader["fileSize"];
(без unchecked
).
В БД SQLite значение хранится как long
, поэтому очень высокие значения становятся отрицательными, и сортировка их на стороне SQL не выполняется. Но после получения значений ulong
Linq может творить чудеса
items = items.OrderByDescending(x => x.FileSize).ToList();