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?

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!


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,


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. ”


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

Możesz użyć longtypu lubInt64



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ą



0

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


-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];
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.