2008-08-05 17 views
103

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

Sin embargo, muchos ejemplos en la web muestran el uso de un DataSet en su lugar y el acceso a la tabla (s) a través del método de colecciones.

¿Existe alguna ventaja, basada en el rendimiento o no, de utilizar DataSets o DataTables como método de almacenamiento para los resultados de SQL?

+0

Si está trabajando con aplicaciones web, es posible que desee considerar el uso de un DataReader: http://aspnet.4guysfromrolla.com/articles/050405-1.aspx http://aspnet.4guysfromrolla.com/articles/ 051805-1.aspx http://www.devx.com/vb2themax/Article/19887/1954?pf=true – GernBlandston

Respuesta

82

Realmente depende del tipo de datos que está volviendo. 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 lo que respecta al rendimiento, es más probable que obtenga ineficacia de las consultas no optimizadas que de la elección "incorrecta" de la construcción .NET. Al menos, esa ha sido mi experiencia.

6

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

+3

AFAIK uno grande era que una DataTable no se podía serializar y no se podía devolver como resultado de un servicio web. –

5

Una característica del DataSet es que si puede llamar múltiples instrucciones de selección en sus procedimientos almacenados, el DataSet tendrá una DataTable para cada una.

+0

También puede ejecutar múltiples consultas de selección de SQL en un SQLCommand y acceder a cada conjunto de resultados en el conjunto de datos. Tablas [i] – Jan

3

Existen algunas optimizaciones que puede utilizar al completar una DataTable, como llamar a BeginLoadData(), insertar los datos y luego llamar a EndLoadData(). Esto desactiva algún comportamiento interno dentro de DataTable, como mantenimiento de índice, etc. Consulte this article para obtener más información.

19

Una diferencia importante es que DataSets puede contener varias tablas y usted puede definir las relaciones entre esas tablas.

Si solo devuelve un único conjunto de resultados, creo que una DataTable estaría más optimizada. Creo que tiene que haber una sobrecarga (concedida pequeña) para ofrecer la funcionalidad de un DataSet y hacer un seguimiento de múltiples DataTables.

0

Cuando 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. Ambos tienen un "GetChanges" sin embargo, por lo que puede usar eso y probar null.

Cuestiones relacionadas