Datatable vs Dataset

129

Saat ini saya menggunakan DataTable untuk mendapatkan hasil dari database yang bisa saya gunakan dalam kode saya.

Namun, banyak contoh di web show menggunakan DataSet sebagai gantinya dan mengakses tabel melalui metode koleksi.

Apakah ada keuntungan, kinerja bijaksana atau cara lain, menggunakan DataSets atau DataTables sebagai metode penyimpanan untuk hasil SQL?

GateKiller
sumber
1
Jika Anda bekerja dengan aplikasi web, Anda mungkin ingin mempertimbangkan untuk menggunakan DataReader: aspnet.4guysfromrolla.com/articles/050405-1.aspx aspnet.4guysfromrolla.com/articles/051805-1.aspx devx.com/vb2themax/ Article / 19887/1954? Pf = true
Chris Burgess
Pada akhirnya, DataTable dan DataSet adalah transisi yang berguna dari ADO RecordSet ... kembali pada tahun 2002. Anda seharusnya tidak membuat mereka metafora data primer Anda hari ini.
Marc Gravell
@MarcGravell Apa yang Anda sarankan sebagai metafora data primer hari ini?
m_a_s
@m_a_s eksplisit t - kelas, biasanya; mungkin "catatan" di c # vNext
Marc Gravell

Jawaban:

94

Ini benar-benar tergantung pada jenis data yang Anda bawa kembali. Karena DataSet (sebenarnya) hanyalah kumpulan objek DataTable, Anda dapat mengembalikan beberapa set data yang berbeda menjadi objek tunggal, dan karenanya lebih mudah dikelola.

Dari segi kinerja, Anda cenderung mendapatkan inefisiensi dari kueri yang tidak dioptimalkan daripada dari pilihan "salah" dari konstruksi .NET. Setidaknya, itulah pengalaman saya.

ZombieSheep
sumber
29

Satu perbedaan utama adalah bahwa DataSet dapat menampung banyak tabel dan Anda dapat mendefinisikan hubungan antara tabel-tabel itu.

Jika Anda hanya mengembalikan satu set hasil meskipun saya pikir DataTable akan lebih dioptimalkan. Saya akan berpikir harus ada beberapa overhead (diberikan kecil) untuk menawarkan fungsionalitas yang dilakukan DataSet dan melacak beberapa DataTables.

Joshua Hudson
sumber
8

di 1.x dulu ada hal-hal yang DataTables tidak bisa melakukan yang DataSets bisa (tidak ingat persis apa). Semua yang diubah di 2.x. Dugaan saya adalah itu sebabnya banyak contoh masih menggunakan DataSets. DataTable harus lebih cepat karena lebih ringan. Jika Anda hanya menarik satu hasil tunggal, itu pilihan terbaik Anda di antara keduanya.

Karl Seguin
sumber
4
AFAIK satu yang besar adalah bahwa DataTable tidak bisa serial dan tidak bisa dikembalikan sebagai hasil dari WebService.
Martin Clarke
6

Salah satu fitur dari DataSet adalah bahwa jika Anda dapat memanggil beberapa pernyataan pilihan dalam prosedur tersimpan Anda, DataSet akan memiliki satu DataTable untuk masing-masingnya.

Shawn
sumber
Anda juga dapat menjalankan beberapa kueri pemilihan SQL dalam satu perintah SQLC dan mengakses setiap resultset dalam dataset. Tabel [i]
Jan
3

Ada beberapa optimasi yang bisa Anda gunakan saat mengisi DataTable, seperti memanggil BeginLoadData (), memasukkan data, lalu memanggil EndLoadData (). Ini mematikan beberapa perilaku internal dalam DataTable, seperti pemeliharaan indeks, dll. Lihat artikel ini untuk detail lebih lanjut.

tffffni
sumber
1

Ketika Anda hanya berurusan dengan satu tabel saja, perbedaan praktis terbesar yang saya temukan adalah bahwa DataSet memiliki metode "HasChanges" tetapi DataTable tidak. Namun keduanya memiliki "GetChanges", sehingga Anda dapat menggunakannya dan menguji nol.

MickeyfAgain_BeforeExitOfSO
sumber
0

Objek DataTable mewakili data tabular sebagai dalam-memori, cache tabular dari baris, kolom, dan batasan. DataSet terdiri dari kumpulan objek DataTable yang dapat Anda hubungkan satu sama lain dengan objek DataRelation.

Nischal Tyagi
sumber