Veri Kümesi vs Veri Kümesi


129

Kodumda kullanabileceğim bir veritabanından sonuçları almak için şu anda bir DataTable kullanıyorum.

Bununla birlikte, web'deki birçok örnek bunun yerine bir DataSet kullanmayı ve tablolara koleksiyonlar yöntemiyle erişmeyi gösterir.

SQL sonuçları için bir depolama yöntemi olarak Veri Kümelerini veya Veri Tablolarını kullanmanın performans açısından veya başka bir şekilde herhangi bir avantajı var mı?



Sonuçta, DataTable ve DataSet, 2002'de ADO RecordSet'ten faydalı geçişlerdi. Bu günlerde onlara birincil veri metaforunuz yapmamalısınız.
Marc Gravell

@MarcGravell Bugünlerde birincil veri metaforu olarak ne önerirsiniz?
m_a_s

@m_a_s açık t - sınıflar, tipik olarak; belki "kayıtlar" c # vNext
Marc Gravell

Yanıtlar:


94

Gerçekten geri getirdiğiniz verinin türüne bağlı. Bir DataSet (aslında) yalnızca bir DataTable nesnesi koleksiyonu olduğundan, birden çok farklı veri kümesini tek ve dolayısıyla daha yönetilebilir bir nesneye döndürebilirsiniz.

Performans açısından, .NET yapısının "yanlış" seçiminden çok, optimize edilmemiş sorgulardan verimsizlik elde etme olasılığınız daha yüksektir. En azından benim deneyimim buydu.


29

Önemli bir fark, DataSets'in birden çok tablo tutabilmesi ve bu tablolar arasındaki ilişkileri tanımlayabilmenizdir.

Yalnızca tek bir sonuç kümesi döndürüyorsanız, bir DataTable'ın daha optimize olacağını düşünürdüm. Bir DataSet'in sunduğu işlevselliği sunmak ve birden fazla DataTable'ı takip etmek için bazı ek yüklerin (küçük verilir) olması gerektiğini düşünüyorum.


8

1.x'te DataSets'in yapabildiği DataTables'ın yapamadığı şeyler vardı (tam olarak ne olduğunu hatırlamıyorum). Tüm bunlar 2.x'te değiştirildi. Tahminim bu yüzden birçok örnek hala DataSets kullanıyor. DataTable'lar daha hafif olduklarından daha hızlı olmalıdır. Yalnızca tek bir sonuç kümesi çekiyorsanız, ikisi arasındaki en iyi seçim budur.


4
AFAIK'in en büyüklerinden biri, DataTable'ın serileştirilememesi ve bir WebService'den geri döndürülememesiydi.
Martin Clarke

6

DataSet'in bir özelliği, saklı yordamlarınızda birden çok select deyimi çağırabiliyorsanız, DataSet'in her biri için bir DataTable'a sahip olmasıdır.


Ayrıca, bir SQLCommand'da birden fazla SQL seçme sorgusu çalıştırabilir ve veri kümesindeki her sonuç kümesine erişebilirsiniz. Tablolar [i]
Ocak

3

Bir DataTable'ı doldururken BeginLoadData () 'yı çağırmak, verileri eklemek ve ardından EndLoadData ()' yı çağırmak gibi kullanabileceğiniz bazı optimizasyonlar vardır. Bu, DataTable içindeki dizin bakımı vb. Gibi bazı dahili davranışları kapatır. Daha fazla ayrıntı için bu makaleye bakın.


1

Zaten sadece tek bir tabloyla uğraşırken, bulduğum en büyük pratik fark, DataSet'in bir "HasChanges" yöntemine sahip olduğu, ancak DataTable'ın olmadığıdır. Ancak her ikisinin de bir "GetChanges" vardır, bu nedenle onu kullanabilir ve null için test edebilirsiniz.


0

DataTable nesnesi, tablo halindeki verileri bir bellek içi, satır, sütun ve kısıtlamalardan oluşan bir tablo önbelleği olarak temsil eder. DataSet, DataRelation nesneleriyle birbirinizle ilişkilendirebileceğiniz DataTable nesnelerinin bir koleksiyonundan oluşur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.