Datatable vs Dataset


129

ปัจจุบันฉันใช้ DataTable เพื่อรับผลลัพธ์จากฐานข้อมูลที่ฉันสามารถใช้ในรหัสของฉันได้

อย่างไรก็ตามตัวอย่างมากมายบนเว็บแสดงโดยใช้ชุดข้อมูลแทนและการเข้าถึงตารางผ่านวิธีการรวบรวม

มีข้อได้เปรียบประสิทธิภาพที่ชาญฉลาดหรืออย่างอื่นในการใช้ DataSets หรือ DataTables เป็นวิธีการจัดเก็บสำหรับผลลัพธ์ SQL หรือไม่?


1
หากคุณกำลังทำงานกับเว็บแอปคุณอาจต้องการพิจารณาใช้ DataReader: aspnet.4guysfromrolla.com/articles/050405-1.aspx aspnet.4guysfromrolla.com/articles/051805-1.aspx devx.com/vb2themax/ บทความ / 19887/1954? pf = true
Chris Burgess

ท้ายที่สุด DataTable และ DataSet เป็นการเปลี่ยนที่มีประโยชน์จาก ADO RecordSet ... ย้อนกลับไปในปี 2002 คุณไม่ควรใช้คำอุปมาข้อมูลหลักของคุณในทุกวันนี้
Marc Gravell

@MarcGravell คุณจะแนะนำอะไรเป็นอุปมาข้อมูลหลักในทุกวันนี้?
m_a_s

@m_a_s อย่างชัดเจน t - คลาสโดยทั่วไป; อาจจะเป็น "บันทึก" ใน c # vNext
Marc Gravell

คำตอบ:


94

ขึ้นอยู่กับประเภทของข้อมูลที่คุณนำกลับมา เนื่องจากชุดข้อมูลเป็น (มีผล) เป็นเพียงชุดของออบเจ็กต์ DataTable คุณจึงสามารถส่งคืนชุดข้อมูลที่แตกต่างกันหลายชุดให้เป็นออบเจ็กต์เดียวและจัดการได้ง่ายกว่า

ประสิทธิภาพที่ชาญฉลาดคุณมีแนวโน้มที่จะได้รับความไม่มีประสิทธิภาพจากการสืบค้นที่ไม่ได้เพิ่มประสิทธิภาพมากกว่าจากตัวเลือกที่ "ผิด" ของโครงสร้าง. NET อย่างน้อยนั่นก็เป็นประสบการณ์ของฉัน


29

ข้อแตกต่างที่สำคัญอย่างหนึ่งคือชุดข้อมูลสามารถเก็บตารางได้หลายตารางและคุณสามารถกำหนดความสัมพันธ์ระหว่างตารางเหล่านั้นได้

หากคุณส่งคืนชุดผลลัพธ์เดียว แต่ฉันคิดว่า DataTable จะได้รับการปรับให้เหมาะสมมากขึ้น ฉันคิดว่าต้องมีค่าใช้จ่ายบางส่วน (ได้รับเล็กน้อย) เพื่อเสนอฟังก์ชันที่ชุดข้อมูลทำและติดตาม DataTables หลายรายการ


8

ใน 1.x เคยมีสิ่งที่ DataTables ทำไม่ได้ซึ่ง DataSets ทำได้ (จำไม่ได้ว่าอะไร) ทั้งหมดที่เปลี่ยนแปลงใน 2.x. ฉันเดาว่านั่นเป็นเหตุผลว่าทำไมตัวอย่างจำนวนมากยังคงใช้ชุดข้อมูล ตารางข้อมูลควรเร็วกว่าเนื่องจากมีน้ำหนักเบากว่า หากคุณดึงผลลัพธ์เพียงชุดเดียวนั่นคือทางเลือกที่ดีที่สุดระหว่างสอง


4
AFAIK หนึ่งใหญ่คือ DataTable ไม่สามารถต่ออนุกรมและไม่สามารถส่งคืนได้เนื่องจาก WebService
Martin Clarke

6

คุณลักษณะหนึ่งของชุดข้อมูลคือถ้าคุณสามารถเรียกใช้คำสั่งที่เลือกได้หลายรายการในกระบวนงานที่จัดเก็บไว้ชุดข้อมูลจะมีตารางข้อมูลหนึ่งชุดสำหรับแต่ละชุด


นอกจากนี้คุณยังสามารถทำงานได้หลายคำสั่ง SQL เลือกหนึ่งใน SQLCommand และการเข้าถึงแต่ละ resultset ใน dataset.Tables [ผม]
ม.ค.

3

มีการเพิ่มประสิทธิภาพบางอย่างที่คุณสามารถใช้เมื่อกรอก DataTable เช่นการเรียก BeginLoadData () การแทรกข้อมูลจากนั้นเรียก EndLoadData () สิ่งนี้จะปิดพฤติกรรมภายในบางอย่างภายใน DataTable เช่นการดูแลดัชนีเป็นต้นดูบทความนี้สำหรับรายละเอียดเพิ่มเติม


1

เมื่อคุณจัดการกับตารางเดียวเท่านั้นความแตกต่างในทางปฏิบัติที่ใหญ่ที่สุดที่ฉันพบคือ DataSet มีเมธอด "HasChanges" แต่ DataTable ไม่มี อย่างไรก็ตามทั้งสองมี "GetChanges" ดังนั้นคุณสามารถใช้และทดสอบค่าว่างได้


0

ออบเจ็กต์ DataTable แสดงถึงข้อมูลแบบตารางเป็นหน่วยความจำแคชแบบตารางของแถวคอลัมน์และข้อ จำกัด ชุดข้อมูลประกอบด้วยชุดของวัตถุ DataTable ที่คุณสามารถเชื่อมโยงซึ่งกันและกันกับวัตถุ DataRelation

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