Jaki jest odpowiednik bigint w C #?

209

Czego powinienem użyć podczas obsługi wartości w C #, która jest bigintem dla bazy danych SQL Server?

Asad
źródło

Odpowiedzi:

354

To odpowiada długiej (lub Int64 ) 64-bitowej liczbie całkowitej.

Chociaż jeśli liczba z bazy danych jest wystarczająco mała i przypadkowo używasz Int32 itp., Nic ci nie będzie. Ale Int64 na pewno to wytrzyma.

A błąd pojawia się, gdy używasz czegoś mniejszego i potrzebny jest pełny rozmiar? Przepełnienie stosu! Tak!

Patrick Karcher
źródło
100
Jasne, że to nie przepełnienie liczb całkowitych?
luqui
6
Dobra informacja dla większej liczby typów danych: msdn.microsoft.com/en-us/library/system.data.sqldbtype.aspx
MacGyver
3
w języku C # longnie jest pisane dużymi literami.
Shawn Kovac,
konwertować datetime na długi?
Kiquenet,
60

Int64mapy bezpośrednio do BigInt.

Źródło

ChaosPandion
źródło
3
to długa inna nazwa dla Int64 /
Asad
11
Tak. Słowo longkluczowe jest aliasem dla System.Int64.
Anon.
12

Właśnie miałem skrypt, który zwrócił klucz podstawowy wkładki i użyłem

SELECT @@identity

na moim kluczu głównym bigint, a błąd rzutowania pojawia się przy użyciu długiego - dlatego zacząłem to wyszukiwanie. Prawidłowa odpowiedź przynajmniej w moim przypadku jest taka, że ​​typ zwracany przez ten wybór jest NUMERYCZNY, co odpowiada typowi dziesiętnemu. Użycie długiego spowoduje wyjątek rzutowania.

Jest to jeden z powodów, aby sprawdzić swoje odpowiedzi w więcej niż jednym wyszukiwaniu Google (a nawet w Stack Overflow!).

Aby zacytować administratora bazy danych, który mi pomógł:

... BigInt to nie to samo co INT64, bez względu na to, jak bardzo wyglądają podobnie. Częściowo dlatego, że SQL często konwertuje Int / BigInt na Liczbowe w ramach normalnego przetwarzania. Więc jeśli chodzi o OLE lub .NET, wymagana konwersja jest NUMERYCZNA na INT.

Często nie zauważamy, ponieważ drukowana wartość wygląda tak samo. ”

Robb Sadler
źródło
Dzięki za wskazówkę numeryczną ... właśnie mi pomogło!
jpshook
8
Wystąpił błąd rzutowania, ponieważ SCOPE_IDENTITY i @@ IDENTITY zwracają NUMERIC (38, 0), a nie dlatego, że twoja BigInt PK nie pasuje do C # Int64. Innymi słowy, BigInt jest taki sam jak Int64, ale wartości BigInt zwracane przez SCOPE_IDENTITY lub @@ IDENTITY mogą być konwertowane w górę na NUMERIC (38, 0).
Dan Hermann
Dzięki Dan. Do Twojej wiadomości, nadal dzieje się z SQL Azure (RTM) - 12.0.2000.8 i .NET v 4.5
Gunnar
6

Użyj długiego typu danych.

Otávio Décio
źródło
6

Możesz użyć longtypu lubInt64


źródło
2

Myślę, że odpowiednikiem jest Int64

John Boker
źródło
1

int w mapach sql bezpośrednio do int32 znany również jako prymitywny typ, tj. int w C #, podczas gdy

bigint w Sql Server mapuje bezpośrednio na int64 znany również jako prymitywny typ, tj. długi w C #

Wyraźna konwersja, jeśli zdefiniowano tutaj biginteger na liczbę całkowitą

Technacron
źródło
0

W większości przypadków jest długi (int64) w c #

Rajeev Sirohi
źródło
0

jeśli używasz bigint w tabeli bazy danych, możesz użyć Long w C #

Abbasibh
źródło
-3

Miałem do czynienia z typem danych bigint wyświetlanym w DataGridView i zrobiłem to w ten sposób

something = (int)(Int64)data_reader[0];
Rúben
źródło