Qu'est-ce que je suis censé utiliser pour gérer une valeur en C #, qui est bigint pour une base de données SQL Server?
Cela correspond à long (ou Int64), un entier de 64 bits.
Même si le nombre de la base de données est suffisamment petit et que vous utilisez accidentellement un Int32, etc., tout ira bien. Mais le Int64 le tiendra définitivement.
Et l'erreur que vous obtenez si vous utilisez quelque chose de plus petit et la taille complète est nécessaire? n débordement de pile! Yay!
Int64
mappe directement à BigInt
.
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 conversion avec long - c’est pourquoi j’ai commencé cette recherche. La réponse correcte du 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 provoquera une exception de distribution.
C'est l'une des raisons pour 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 identique à INT64, peu importe à quel point ils se ressemblent. Une partie de la raison est que SQL convertira fréquemment Int/BigInt en numérique dans le cadre du traitement normal. Ainsi, lorsqu'il passe à OLE ou à .NET, la conversion requise est NUMERIC to INT.
Nous ne le remarquons pas souvent puisque la valeur imprimée est identique. "
Vous pouvez utiliser long
type ou Int64
Utilisez un long type de données.
Je pense que l'équivalent est Int64
int dans SQL mappe directement vers int32 également connu sous le nom de type primitif, à savoir int dans C # alors que
bigint dans Sql Server mappe directement sur int64 également connu sous le nom de type primitif c'est-à-dire long dans C #
Une conversion explicite si biginteger en entier a été défini ici