Что эквивалентно 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
60

Int64карты непосредственно в BigInt.

Источник

ChaosPandion
источник
3
длинное другое имя для Int64 /
Асад
11
Да. longКлючевое слово является псевдонимом System.Int64.
Анон.
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

Используйте длинный тип данных.

Otávio Décio
источник
6

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


источник
2

Я думаю, что эквивалент Int64

Джон Бокер
источник
1

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

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

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

Technacron
источник
0

В большинстве случаев это длинный (int64) в c #

Раджив Сирохи
источник
0

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

Abbasibh
источник
-3

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

something = (int)(Int64)data_reader[0];
Rúben
источник