Qual è l'equivalente di bigint in C #?


209

Cosa dovrei usare quando gestisco un valore in C #, che è bigint per un database SQL Server?

Risposte:


354

Ciò corrisponde al lungo (o Int64 ), un numero intero a 64 bit.

Anche se il numero dal database sembra essere abbastanza piccolo, e accidentalmente usi un Int32, ecc., Starai bene. Ma Int64 lo terrà sicuramente.

E l'errore che si ottiene se si utilizza qualcosa di più piccolo e sono necessarie le dimensioni complete? Un overflow dello stack! Sìì!


100
Sicuro che non sia un overflow di numeri interi?
Luqui,

6
Buon riferimento per più tipi di dati: msdn.microsoft.com/en-us/library/system.data.sqldbtype.aspx
MacGyver

3
in C #, longnon è maiuscolo.
Shawn Kovac

convertire datetime in long?
Kiquenet,


12

Ho appena avuto uno script che ha restituito la chiave primaria di un inserto e utilizzato un

SELECT @@identity

sulla mia chiave primaria bigint e ricevo un errore cast usando long - ecco perché ho iniziato questa ricerca. La risposta corretta almeno nel mio caso è che il tipo restituito da quella selezione è NUMERIC che equivale a un tipo decimale. L'uso di un long provocherà un'eccezione di cast.

Questo è un motivo per controllare le tue risposte in più di una ricerca su Google (o anche su Stack Overflow!).

Per citare un amministratore di database che mi ha aiutato:

... BigInt non è uguale a INT64, non importa quanto si assomiglino. Parte del motivo è che SQL convertirà spesso Int / BigInt in Numerico come parte dell'elaborazione normale. Pertanto, quando si passa a OLE o .NET, la conversione richiesta è NUMERICA in INT.

Spesso non ci accorgiamo poiché il valore stampato sembra lo stesso. "


Grazie per la punta numerica .. mi ha appena aiutato alla grande!
jpshook,

8
Hai ricevuto un errore di cast perché SCOPE_IDENTITY e @@ IDENTITY restituiscono NUMERIC (38, 0), non perché il tuo BigInt PK non si adatta a un C # Int64. In altre parole, BigInt è uguale a Int64, ma i valori di BigInt restituiti tramite SCOPE_IDENTITY o @@ IDENTITY possono essere convertiti verso l'alto in NUMERIC (38, 0).
Dan Hermann,

Grazie Dan. Cordiali saluti, ancora in corso con SQL Azure (RTM) - 12.0.2000.8 e .NET v 4.5
Gunnar


6

Puoi usare il longtipo oInt64



1

int nelle mappe sql direttamente a int32 noto anche come tipo primitivo cioè int in C # considerando

bigint in SQL Server si associa direttamente a int64 noto anche come un tipo primitivo cioè lungo in C #

Una conversione esplicita se biginteger in intero è stato definito qui



0

se stai usando bigint nella tabella del tuo database, puoi usare Long in C #


-3

Stavo gestendo un tipo di dati bigint da mostrare in un DataGridView e l'ho reso così

something = (int)(Int64)data_reader[0];
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.