Datatable vs Dataset


129

Attualmente uso una DataTable per ottenere risultati da un database che posso usare nel mio codice.

Tuttavia, molti esempi sul Web mostrano l'utilizzo di un DataSet e l'accesso alle tabelle tramite il metodo di raccolta.

C'è qualche vantaggio, in termini di prestazioni o meno, di utilizzare DataSet o DataTables come metodo di archiviazione per risultati SQL?



In definitiva, DataTable e DataSet sono state utili transizioni da ADO RecordSet ... nel 2002. Al giorno d'oggi non dovresti cuocerle con la tua metafora dei dati primari.
Marc Gravell

@MarcGravell Cosa suggeriresti oggi come metafora dei dati primari?
m_a_s

@m_a_s t - classi esplicite, in genere; forse "registra" in c # vProssimo
Marc Gravell

Risposte:


94

Dipende molto dal tipo di dati che stai riportando. Poiché un DataSet è (in effetti) solo una raccolta di oggetti DataTable, è possibile restituire più insiemi di dati distinti in un singolo oggetto, e quindi più gestibile.

Per quanto riguarda le prestazioni, è più probabile che tu ottenga l'inefficienza da query non ottimizzate rispetto alla scelta "sbagliata" del costrutto .NET. Almeno, questa è stata la mia esperienza.


29

Una grande differenza è che i DataSet possono contenere più tabelle ed è possibile definire relazioni tra tali tabelle.

Se stai restituendo un solo set di risultati, penso che una DataTable sarebbe più ottimizzata. Penso che ci debba essere un certo sovraccarico (concesso di piccole dimensioni) per offrire la funzionalità di un DataSet e tenere traccia di più DataTables.


8

in 1.x c'erano cose che DataTables non poteva fare quali DataSet potevano (non ricordare esattamente cosa). Tutto ciò che è stato modificato in 2.x. Suppongo sia per questo che molti esempi usano ancora DataSet. DataTables dovrebbe essere più veloce in quanto più leggero. Se stai solo estraendo un singolo set di risultati, è la scelta migliore tra i due.


4
AFAIK uno di quelli grandi era che un DataTable non poteva essere serializzato e non poteva essere restituito come risultato da un WebService.
Martin Clarke,

6

Una caratteristica del DataSet è che se è possibile chiamare più istruzioni select nelle procedure memorizzate, il DataSet avrà una DataTable per ciascuna.


È inoltre possibile eseguire più query di selezione SQL in una SQLCommand e l'accesso ciascun gruppo di risultati in dataset.Tables [i]
Gen

3

Esistono alcune ottimizzazioni che è possibile utilizzare durante il riempimento di una DataTable, come la chiamata BeginLoadData (), l'inserimento dei dati, quindi la chiamata a EndLoadData (). Ciò disattiva alcuni comportamenti interni all'interno della DataTable, come la manutenzione dell'indice, ecc. Vedere questo articolo per ulteriori dettagli.


1

Quando hai a che fare solo con una singola tabella, la più grande differenza pratica che ho riscontrato è che DataSet ha un metodo "HasChanges", ma DataTable no. Entrambi hanno un "GetChanges" comunque, quindi puoi usarlo e testare null.


0

Un oggetto DataTable rappresenta i dati tabulari come una cache tabulare in memoria di righe, colonne e vincoli. Il DataSet è costituito da una raccolta di oggetti DataTable che è possibile correlare tra loro con oggetti DataRelation.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.