Який еквівалент bigint в C #?


209

Що я повинен використовувати при обробці значення в C #, що є bigint для бази даних SQL Server?

Відповіді:


354

Це відповідає довгому (або Int64 ), 64-бітовому цілому.

Хоча якщо число з бази даних буде досить малим, і ви випадково використовуєте Int32 тощо, ви будете в порядку. Але Int64 , безумовно, утримає його.

І помилка, яку ви отримуєте, якщо використовуєте щось менше і потрібен повний розмір? Переповнення стека! Так!


100
Звичайно, це не ціле переповнення?
luqui

6
Хороший довідник для інших типів даних: msdn.microsoft.com/en-us/library/system.data.sqldbtype.aspx
MacGyver

3
в C #, longне пишеться з великої літери.
Шон Ковач

перетворити дату в довгий?
Кікенет


12

У мене просто був сценарій, який повертав первинний ключ вставки та використовував

SELECT @@identity

на моєму первинному ключі bigint, і я отримую помилку вкидання, використовуючи long - саме тому я і почав цей пошук. Правильна відповідь, принаймні в моєму випадку, полягає в тому, що тип, який повертається цим вибором, є NUMERIC, що прирівнюється до десяткового типу. Використання довгих призведе до виключення в ролях.

Це одна з причин перевірити свої відповіді в декількох пошукових системах Google (або навіть у переповненні стека!).

Процитуйте адміністратора бази даних, який мені допоміг:

... BigInt не такий, як INT64, незалежно від того, наскільки вони схожі. Частина причини полягає в тому, що SQL часто перетворює Int / BigInt в Numeric як частину звичайної обробки. Таким чином, коли мова йде про OLE або .NET, потрібне перетворення має значення NUMERIC to INT.

Ми часто не помічаємо, оскільки надрукована вартість виглядає однаково ".


Дякую за числову пораду .. просто допоміг мені великий час!
jpshook

8
У вас виникла помилка, оскільки SCOPE_IDENTITY та @@ IDENTITY повертають NUMERIC (38, 0), а не тому, що ваш BigInt PK не входить у C # Int64. Іншими словами, BigInt - це те саме, що і Int64, але значення BigInt, повернені через SCOPE_IDENTITY або @@ IDENTITY, можуть бути перетворені в NUMERIC (38, 0).
Дан Герман

Дякую Ден. FYI, що все ще відбувається з SQL Azure (RTM) - 12.0.2000.8 & .NET v 4.5
Gunnar


6

Ви можете використовувати longтип абоInt64



1

int в sql картах безпосередньо до int32 також відомий як примітивний тип, тобто int в C #, тоді як

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

Явне перетворення, якщо тут було визначено велике число до цілого числа



0

якщо ви використовуєте bigint в таблиці бази даних, ви можете використовувати Long in C #


-3

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

something = (int)(Int64)data_reader[0];
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.