Quel est l'équivalent de bigint en C #?


209

Qu'est-ce que je suis censé utiliser lors de la gestion d'une valeur en C #, qui est importante pour une base de données SQL Server?

Réponses:


354

Cela correspond au long (ou Int64 ), un entier 64 bits.

Bien que si le nombre de la base de données est suffisamment petit et que vous utilisez accidentellement un Int32, etc., tout ira bien. Mais l' Int64 le tiendra certainement.

Et l'erreur que vous obtenez si vous utilisez quelque chose de plus petit et que la taille réelle est nécessaire? Un débordement de pile! Yay!


100
Bien sûr, ce n'est pas un débordement d'entier?
luqui

6
Bonne référence pour plus de types de données: msdn.microsoft.com/en-us/library/system.data.sqldbtype.aspx
MacGyver

3
en C #, longn'est pas capitalisé.
Shawn Kovac

convertir datetime en long?
Kiquenet


12

Je viens d'avoir un script qui a renvoyé la clé primaire d'un insert et utilisé un

SELECT @@identity

sur ma clé primaire bigint, et j'obtiens une erreur de transtypage en utilisant long - c'est pourquoi j'ai commencé cette recherche. La bonne réponse au moins dans mon cas est que le type renvoyé par cette sélection est NUMERIC, ce qui équivaut à un type décimal. L'utilisation d'un long entraînera une exception de transtypage.

C'est une des raisons de vérifier vos réponses dans plusieurs recherches Google (ou même sur Stack Overflow!).

Pour citer un administrateur de base de données qui m'a aidé:

... BigInt n'est pas la même chose que INT64, peu importe à quoi ils se ressemblent. Une partie de la raison est que SQL convertit fréquemment Int / BigInt en Numérique dans le cadre du traitement normal. Ainsi, lorsqu'il passe à OLE ou .NET, la conversion requise est NUMÉRIQUE en INT.

Nous ne le remarquons pas souvent car la valeur imprimée est identique. "


Merci pour la pointe numérique .. m'a juste aidé beaucoup de temps!
jpshook

8
Vous avez obtenu une erreur de conversion car SCOPE_IDENTITY et @@ IDENTITY renvoient NUMERIC (38, 0), pas parce que votre BigInt PK ne rentre pas dans un C # Int64. En d'autres termes, BigInt est identique à Int64, mais les valeurs BigInt renvoyées via SCOPE_IDENTITY ou @@ IDENTITY peuvent être converties en NUMERIC (38, 0).
Dan Hermann

Merci Dan. FYI, toujours en cours avec SQL Azure (RTM) - 12.0.2000.8 & .NET v 4.5
Gunnar


6

Vous pouvez utiliser le longtype ouInt64



1

int dans sql correspond directement à int32 également connu comme un type primitif, c'est-à-dire int en C # alors que

bigint dans Sql Server correspond directement à int64 également connu comme un type primitif, c'est-à-dire long en C #

Une conversion explicite si biginteger en entier a été défini ici



0

si vous utilisez bigint dans votre table de base de données, vous pouvez utiliser Long en C #


-3

Je manipulais un type de données bigint à afficher dans un DataGridView et le faisais comme ceci

something = (int)(Int64)data_reader[0];
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.