¿Qué es mejor: DataSet o DataReader?

Acabo de ver este tema: Datatable vs Dataset, pero no resolvió mi duda … Permítanme explicarlo mejor, estaba haciendo conexión con la base de datos y necesitaba mostrar los resultados en un GridView. (Utilicé RecordSet cuando trabajé con VB6 hace un tiempo y DataSet es bastante similar, así que era mucho más fácil de usar DataSet.) Luego, un tipo me dijo que DataSet no era el mejor método para hacerlo …

Entonces, ¿debería ‘aprender’ DataReader o seguir usando DataSet? Tabla de datos ? ¿Cuáles son los pros / contras?

Depende de tus necesidades. Una de las diferencias más importantes es que un DataReader mantendrá una conexión abierta a su base de datos hasta que haya terminado con él, mientras que un DataSet será un objeto en memoria. Si enlaza un control a un DataReader, entonces sigue abierto. Además, un DataReader es un enfoque directo para leer datos que no se pueden manipular. Con un DataSet puedes avanzar y retroceder y manipular los datos como mejor te parezca.

Algunas características adicionales: los DataSets se pueden serializar y representar en XML y, por lo tanto, se pueden pasar fácilmente a otros niveles. DataReaders no se puede serializar.

Por otro lado, si tiene una gran cantidad de filas para leer desde la base de datos que transfiere a algún proceso para una regla empresarial, un DataReader puede tener más sentido en lugar de cargar un DataSet con todas las filas, ocupando memoria y posiblemente afectando escalabilidad.

Aquí hay un enlace que está un poco anticuado, pero sigue siendo útil: Contrastar el DataReader de ADO.NET y DataSet .

Eso es esencialmente: “¿Qué es mejor: un balde o una manguera?”

Un DataSet es el cubo aquí; le permite llevar consigo un conjunto de datos desconectado y trabajar con él, pero incurrirá en el costo de transportarlo (de modo que lo mejor es mantenerlo en un tamaño que le resulte cómodo).

Un lector de datos es la manguera: brinda acceso unidireccional / solo una vez a los datos cuando pasa volando; no es necesario que cargue toda el agua disponible de una vez, pero debe estar conectada al grifo / base de datos.

Y de la misma manera que puede llenar un cubo con una manguera, puede llenar el DataSet con el lector de datos.

El punto que trato de hacer es que hagan cosas diferentes …

Personalmente, no uso DataSet con frecuencia, pero algunas personas los aman. Sin embargo, hago uso de lectores de datos para el acceso BLOB, etc.

Además del argumento de Marc : puedes usar un DataSet sin ninguna base de datos.

Puede completarlo desde un archivo XML, o simplemente desde un progtwig. Rellene con filas de una base de datos, luego dé la vuelta y escríbalo en una base de datos diferente.

Un DataSet es una representación totalmente en memoria de un esquema relacional. Si lo usa o no con una base de datos relacional real depende de usted.

Diferentes necesidades, diferentes soluciones.

Como dijo, el conjunto de datos es más similar al conjunto de registros VB6. Es decir, extraiga los datos que necesita, páselos, haga con ellos lo que desee. Ah, y luego eventualmente deshacerse de eso cuando hayas terminado.

Datareader es más limitado, pero ofrece MUCHO mejor rendimiento cuando todo lo que necesita es leer los datos una vez. Por ejemplo, si usted está rellenando una cuadrícula usted mismo, es decir, extrae los datos, los atraviesa, cada fila llena la cuadrícula y luego arroja los datos, el lector de datos es mucho mejor que el conjunto de datos. Por otro lado, ni siquiera intentes usar Datareader si tienes la intención de actualizar los datos …

Entonces, sí, apréndalo, pero solo úselo cuando sea apropiado. El conjunto de datos le da mucha más flexibilidad.

Para responder a su segunda pregunta: Sí, debe aprender sobre DataReaders. En todo caso, para que entiendas cómo usarlos.

Creo que es mejor que en esta situación usando DataSets, ya que está haciendo el enlace de datos y todo (estoy pensando ciclos de CPU vs esfuerzo humano).

En cuanto a cuál dará un mejor rendimiento. Depende mucho de tu situación. Por ejemplo, si está editando los datos que está vinculando y mezclando los cambios, estará mejor con DataSets