Что эквивалентно bigint в C #?


209

Что я должен использовать при обработке значения в C #, которое является bigint для базы данных SQL Server?

Ответы:


354

Это соответствует длинному (или Int64 ) 64-разрядному целому числу.

Хотя, если число из базы данных окажется достаточно маленьким, и вы случайно используете Int32 и т. Д., Все будет в порядке. Но Int64 определенно его удержит.

И какую ошибку вы получите, если используете что-то меньшее и нужен полный размер? Переполнение стека! Ура!


100
Уверен, что это не целочисленное переполнение?
Luqi

6
Хорошая справка для большего количества типов данных: msdn.microsoft.com/en-us/library/system.data.sqldbtype.aspx
MacGyver

3
в C # longне пишется с большой буквы.
Шон Ковач

конвертировать дату и время в long?
Kiquenet


12

У меня просто был скрипт, который возвращал первичный ключ вставки и использовал

SELECT @@identity

на моем первичном ключе bigint, и я получаю ошибку при использовании long - вот почему я начал этот поиск. Правильный ответ, по крайней мере в моем случае, состоит в том, что тип, возвращаемый этим выбором, является NUMERIC, что соответствует десятичному типу. Использование long вызовет исключение приведения.

Это одна из причин, чтобы проверить свои ответы в более чем одном поиске Google (или даже в переполнении стека!).

Чтобы процитировать администратора базы данных, который помог мне:

... BigInt - это не то же самое, что INT64, независимо от того, насколько они похожи. Частично причина в том, что SQL часто конвертирует Int / BigInt в Numeric как часть обычной обработки. Поэтому, когда дело доходит до OLE или .NET, требуется преобразование NUMERIC в INT.

Мы не часто замечаем, так как напечатанное значение выглядит одинаково. "


Спасибо за числовой совет ... просто выручил меня!
jpshook

8
Вы получили ошибку приведения, потому что SCOPE_IDENTITY и @@ IDENTITY возвращают NUMERIC (38, 0), а не потому, что ваш BigInt PK не вписывается в C # Int64. Другими словами, BigInt - это то же самое, что и Int64, но значения BigInt, возвращаемые через SCOPE_IDENTITY или @@ IDENTITY, могут быть преобразованы с повышением в NUMERIC (38, 0).
Дэн Херманн

Спасибо Дэн. К вашему сведению, все еще происходит с SQL Azure (окончательная первоначальная версия) - 12.0.2000.8 & .NET v 4.5
Гуннар


6

Вы можете использовать longтип илиInt64



1

int в SQL сопоставляется непосредственно с Int32 также известен как примитивный тип, то есть int в C #, тогда как

bigint в Sql Server отображается непосредственно на int64, также известный как примитивный тип, то есть long в C #

Явное преобразование, если biginteger в integer был определен здесь



0

если вы используете bigint в своей таблице базы данных, вы можете использовать Long в C #


-3

Я обрабатывал тип данных bigint для отображения в DataGridView и сделал его таким

something = (int)(Int64)data_reader[0];
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.