Datatable vs Dataset

129

Actualmente uso una DataTable para obtener resultados de una base de datos que puedo usar en mi código.

Sin embargo, muchos ejemplos en la web se muestran usando un DataSet en su lugar y accediendo a las tablas a través del método de colecciones.

¿Hay alguna ventaja, en cuanto al rendimiento o no, de usar DataSets o DataTables como método de almacenamiento para resultados SQL?

GateKiller
fuente
En última instancia, DataTable y DataSet fueron transiciones útiles de ADO RecordSet ... allá por 2002. No debería hornearlas su metáfora de datos principal en estos días.
Marc Gravell
@MarcGravell ¿Qué sugeriría como metáfora de datos principal en estos días?
m_a_s
@m_a_s explícito t - clases, típicamente; quizás "registros" en c # vSiguiente
Marc Gravell

Respuestas:

94

Realmente depende del tipo de datos que está trayendo de vuelta. Dado que un DataSet es (en efecto) solo una colección de objetos DataTable, puede devolver múltiples conjuntos distintos de datos en un solo objeto y, por lo tanto, más manejable.

En cuanto al rendimiento, es más probable que obtenga ineficiencia de las consultas no optimizadas que de la elección "incorrecta" de la construcción .NET. Al menos, esa ha sido mi experiencia.

ZombiOvejas
fuente
29

Una diferencia importante es que los DataSets pueden contener múltiples tablas y usted puede definir relaciones entre esas tablas.

Si solo está devolviendo un conjunto de resultados único, creo que una DataTable estaría más optimizada. Creo que tiene que haber algo de sobrecarga (se le otorga un pequeño) para ofrecer la funcionalidad que hace un DataSet y realizar un seguimiento de múltiples DataTables.

Joshua Hudson
fuente
8

en 1.x solía haber cosas que DataTables no podía hacer que los DataSets podían (no recuerdo exactamente qué). Todo lo que se cambió en 2.x. Supongo que es por eso que muchos ejemplos todavía usan DataSets. Las tablas de datos deberían ser más rápidas ya que son más livianas. Si solo está obteniendo un único conjunto de resultados, es su mejor opción entre los dos.

Karl Seguin
fuente
44
AFAIK uno grande fue que un DataTable no podía ser serializado y no podía ser devuelto como resultado de un Servicio Web.
Martin Clarke el
6

Una característica del DataSet es que si puede llamar a varias declaraciones select en sus procedimientos almacenados, el DataSet tendrá una DataTable para cada uno.

Shawn
fuente
También puede ejecutar múltiples consultas de selección de SQL en una SQLCommand y el acceso cada conjunto de resultados en dataset.Tables [i]
Ene
3

Hay algunas optimizaciones que puede usar al llenar una DataTable, como llamar a BeginLoadData (), insertar los datos y luego llamar a EndLoadData (). Esto desactiva algunos comportamientos internos dentro de DataTable, como el mantenimiento del índice, etc. Consulte este artículo para obtener más detalles.

tbreffni
fuente
1

Cuando de todos modos solo se trata de una sola tabla, la mayor diferencia práctica que he encontrado es que DataSet tiene un método "HasChanges" pero DataTable no. Sin embargo, ambos tienen un "GetChanges", por lo que puede usarlo y probar nulo.

MickeyfAgain_BeforeExitOfSO
fuente
0

Un objeto DataTable representa datos tabulares como una memoria caché tabular en memoria, de filas, columnas y restricciones. El DataSet consiste en una colección de objetos DataTable que pueden relacionarse entre sí con objetos DataRelation.

Nischal Tyagi
fuente