2010-01-21 4 views

risposta

247

corrispondente al lungo (o Int64), un intero a 64 bit.

Anche se il numero dal database sembra essere sufficientemente piccolo e si utilizza accidentalmente un Int32, ecc., Andrà tutto bene. Ma il Int64 lo manterrà sicuramente.

E l'errore si ottiene se si utilizza qualcosa di più piccolo e la dimensione completa è necessaria? Un eccesso di stack! Yay!

+77

Sicuro che non sia overflow intero? – luqui

+3

Buon riferimento per altri tipi di dati: http://msdn.microsoft.com/en-us/library/system.data.sqldbtype.aspx – MacGyver

+1

Overflow stack ricorsivo ... – Nate

43

Int64 mappe direttamente su BigInt.

Source

+3

è lunga altro nome per Int64/ –

+9

Sì. La parola chiave 'long' è un alias per' System.Int64'. –

3

Utilizzare una lunga tipo di dati.

2

Credo che l'equivalente è Int64

9

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

SELECT @@identity 

sulla mia chiave primaria bigint, e ottengo un errore di getto utilizzando lungo - ecco perché ho iniziato questa ricerca. La risposta corretta almeno nel mio caso è che il tipo restituito da quella selezione è NUMERICO che equivale a un tipo decimale. L'uso di un long causerà un'eccezione cast.

Questo è uno dei motivi per verificare le 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 è lo stesso di INT64 non importa quanto si assomigliano. Parte del motivo è che SQL converte spesso Int/BigInt in Numerico come parte della normale elaborazione. Quindi, quando si passa a OLE o .NET, la conversione richiesta è NUMERICA su INT.

Non abbiamo spesso notato dal momento che il valore stampato sembra lo stesso."

+0

Grazie per il suggerimento numerico .. mi ha aiutato molto alla grande! – jpshook

+0

Solo mi ha aiutato anche a leggere un BigInt Scope_Identity – cost

+6

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 _is_ è uguale a Int64, ma i valori BigInt restituiti tramite SCOPE_IDENTITY o @@ IDENTITY possono essere convertiti in NUMERIC (38, 0). – Dan

0

ero gestione di un tipo di dati bigint per essere esposta in una DataGridView e ne ha fatto come questo

something = (int)(Int64)data_reader[0]; 
+0

stai cercando di downcast? – Technacron

3

È può usare long tipo o Int64

2

int nelle mappe SQL direttamente al int32 anche conosciuto come un tipo primitivo cioè int in C# mentre

bigint nelle mappe SQL direttamente al Int64 anche conosciuto come un tipo primitivo i.e galleggiante in C#

Una conversione esplicita se BigInteger per intero è stato definito here