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?

Asad
la source

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!

Patrick Karcher
la source
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
60

Int64correspond directement à BigInt.

La source

ChaosPandion
la source
3
est un autre long nom pour Int64 /
Asad
11
Oui. Le longmot-clé est un alias pour System.Int64.
Anon.
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. "

Robb Sadler
la source
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

Utilisez un type de données long.

Otávio Décio
la source
6

Vous pouvez utiliser le longtype ouInt64


la source
2

Je pense que l'équivalent est Int64

John Boker
la source
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

Technacron
la source
0

Pour la plupart des cas, il est long (int64) en c #

Rajeev Sirohi
la source
0

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

Abbasibh
la source
-3

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

something = (int)(Int64)data_reader[0];
Rúben
la source