อะไรคือสิ่งที่เทียบเท่าของ bigint ใน C #?


209

สิ่งที่ฉันควรจะใช้เมื่อจัดการค่าใน C # ซึ่งมีขนาดใหญ่สำหรับฐานข้อมูล SQL Server

คำตอบ:


354

ที่สอดคล้องกับความยาว (หรือInt64 ) ซึ่งเป็นจำนวนเต็ม 64 บิต

แม้ว่าตัวเลขจากฐานข้อมูลจะเล็กพอ แต่คุณใช้ Int32 โดยไม่ตั้งใจเป็นต้นคุณก็จะสบายดี แต่Int64จะเก็บไว้แน่นอน

และข้อผิดพลาดที่คุณได้รับถ้าคุณใช้บางอย่างที่เล็กกว่าและจำเป็นต้องใช้ขนาดเต็ม? กองล้น! เย้!


100
แน่ใจว่าไม่ใช่จำนวนเต็มล้นใช่ไหม
luqui

6
การอ้างอิงที่ดีสำหรับประเภทข้อมูลเพิ่มเติม: msdn.microsoft.com/en-us/library/system.data.sqldbtype.aspx
MacGyver

3
ใน C # longไม่ได้เป็นตัวพิมพ์ใหญ่
Shawn Kovac

แปลงวันที่และเวลาเป็นยาวหรือไม่
Kiquenet


12

ฉันเพิ่งมีสคริปต์ที่ส่งกลับคีย์หลักของการแทรกและใช้

SELECT @@identity

ในคีย์หลักของฉันที่มีขนาดใหญ่และฉันได้รับข้อผิดพลาดในการส่งโดยใช้เวลานานนั่นคือสาเหตุที่ฉันเริ่มการค้นหานี้ คำตอบที่ถูกต้องอย่างน้อยในกรณีของฉันคือประเภทที่ส่งคืนโดยตัวเลือกนั้นคือ NUMERIC ซึ่งเท่ากับประเภททศนิยม การใช้เวลานานจะทำให้เกิดข้อยกเว้นของการร่าย

นี่คือเหตุผลหนึ่งในการตรวจสอบคำตอบของคุณในการค้นหาของ Google มากกว่าหนึ่งครั้ง (หรือแม้แต่ใน Stack Overflow!)

หากต้องการอ้างอิงผู้ดูแลระบบฐานข้อมูลที่ช่วยฉัน:

... BigInt ไม่เหมือนกับ INT64 ไม่ว่าพวกเขาจะดูเหมือนกันมากแค่ไหนก็ตาม สาเหตุส่วนหนึ่งคือ SQL มักจะแปลง Int / BigInt เป็นตัวเลขเป็นส่วนหนึ่งของการประมวลผลปกติ ดังนั้นเมื่อไปที่ OLE หรือ. NET การแปลงที่ต้องการคือ NUMERIC ถึง INT

เราไม่ได้สังเกตบ่อยนักเนื่องจากค่าที่พิมพ์ออกมานั้นเหมือนกัน "


ขอบคุณสำหรับเคล็ดลับตัวเลข .. เพิ่งช่วยฉันครั้งใหญ่!
jpshook

8
คุณมีข้อผิดพลาดการส่งเนื่องจาก SCOPE_IDENTITY และ @@ IDENTITY ส่งคืน NUMERIC (38, 0) ไม่ใช่เพราะ BigInt PK ของคุณไม่พอดีกับ C # Int64 ในคำอื่น ๆ bigint เป็นเช่นเดียวกับ Int64 แต่ bigint ค่าที่ได้ผ่าน SCOPE_IDENTITY หรือเอกลักษณ์ @@ อาจจะขึ้นแปลงเป็นตัวเลข (38, 0)
Dan Hermann

ขอบคุณแดน FYI ยังคงเกิดขึ้นกับ SQL Azure (RTM) - 12.0.2000.8 และ. NET v 4.5
Gunnar


6

คุณสามารถใช้longประเภทหรือInt64



1

intใน sql map โดยตรงกับint32ยังรู้ว่าเป็นชนิดดั้งเดิมเช่นintในC #ในขณะที่

bigintใน Sql Server แมปโดยตรงกับint64และรู้ว่าเป็นชนิดดั้งเดิมเช่นยาวในC #

การแปลงที่ชัดเจนหากกำหนด biginteger เป็นจำนวนเต็มที่นี่




-3

ฉันกำลังจัดการประเภทข้อมูลขนาดใหญ่ที่จะแสดงใน DataGridView และทำให้เป็นเช่นนี้

something = (int)(Int64)data_reader[0];
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.