Was entspricht Bigint in C #?


209

Was soll ich verwenden, wenn ich einen Wert in C # verarbeite, was für eine SQL Server-Datenbank von großer Bedeutung ist?

Antworten:


354

Das entspricht der langen (oder Int64 ) 64-Bit-Ganzzahl.

Wenn die Nummer aus der Datenbank jedoch klein genug ist und Sie versehentlich einen Int32 usw. verwenden, ist alles in Ordnung. Aber der Int64 wird es definitiv halten.

Und der Fehler, den Sie erhalten, wenn Sie etwas kleineres verwenden und die volle Größe benötigt wird? Ein Stapelüberlauf! Yay!


100
Sicher, es ist kein ganzzahliger Überlauf?
Luqui

6

3
in C # longwird nicht großgeschrieben.
Shawn Kovac

datetime in long umwandeln?
Kiquenet


12

Ich hatte gerade ein Skript, das den Primärschlüssel einer Einfügung zurückgab und a verwendete

SELECT @@identity

auf meinem bigint-Primärschlüssel, und ich erhalte einen Besetzungsfehler mit long - deshalb habe ich diese Suche gestartet. Die richtige Antwort ist zumindest in meinem Fall, dass der von dieser Auswahl zurückgegebene Typ NUMERIC ist, was einem Dezimaltyp entspricht. Die Verwendung eines Longs führt zu einer Cast-Ausnahme.

Dies ist ein Grund, Ihre Antworten in mehr als einer Google-Suche (oder sogar bei Stack Overflow!) Zu überprüfen.

So zitieren Sie einen Datenbankadministrator, der mir geholfen hat:

... BigInt ist nicht dasselbe wie INT64, egal wie sehr sie sich ähneln. Ein Grund dafür ist, dass SQL Int / BigInt im Rahmen der normalen Verarbeitung häufig in Numeric konvertiert. Wenn es also um OLE oder .NET geht, ist die erforderliche Konvertierung NUMERIC to INT.

Wir bemerken es nicht oft, da der gedruckte Wert gleich aussieht. "


Vielen Dank für den numerischen Tipp. Hat mir gerade sehr geholfen!
Jpshook

8
Sie haben einen Umwandlungsfehler erhalten, weil SCOPE_IDENTITY und @@ IDENTITY NUMERIC (38, 0) zurückgeben, nicht weil Ihre BigInt-PK nicht in ein C # Int64 passt. Mit anderen Worten, BigInt ist dasselbe wie Int64, aber BigInt-Werte, die über SCOPE_IDENTITY oder @@ IDENTITY zurückgegeben werden, können in NUMERIC (38, 0) hochkonvertiert werden.
Dan Hermann

Danke Dan. Zu Ihrer Information, immer noch mit SQL Azure (RTM) - 12.0.2000.8 & .NET v 4.5
Gunnar


6

Sie können longTyp oder verwendenInt64



1

int in SQL - Karten direkt an int32 auch als Urtyp weiß also int in C # , während

bigint in SQL Server wird direkt auf int64 abgebildet und auch als primitiver Typ bezeichnet, dh long in C #

Hier wurde eine explizite Konvertierung definiert, wenn biginteger in integer definiert wurde



0

Wenn Sie bigint in Ihrer Datenbanktabelle verwenden, können Sie Long in C # verwenden


-3

Ich habe einen Bigint-Datentyp verarbeitet, der in einer DataGridView angezeigt werden soll, und ihn so erstellt

something = (int)(Int64)data_reader[0];
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.