Colección de citas famosas - Slogan de motivación - Las similitudes y diferencias entre el lector de datos y el conjunto de datos

Las similitudes y diferencias entre el lector de datos y el conjunto de datos

La primera explicación

La mayor diferencia entre DataReader y DataSet es que DataReader siempre ocupa SqlConnection (comúnmente conocida como: conexión no desconectada) cuando se usa cuando se opera la base de datos en línea. cualquier uso de SqlConnection Todas las operaciones provocarán excepciones en DataReader. Debido a que DataReader solo carga un dato en la memoria a la vez, la memoria ocupada es muy pequeña. Debido a la particularidad y el alto rendimiento de DataReader, DataReader es solo avanzado. Después de leer el primer elemento, no podrá volver a leerlo.

DataSet carga los datos en la memoria de una vez, abandonando la conexión a la base de datos (comúnmente conocida como: conexión desconectada). La conexión de la base de datos se abandona después de la lectura. Debido a que DataSet carga todos los datos en la memoria, consume más memoria. Pero de hecho es más flexible que DataReader. Puede agregar dinámicamente filas, columnas, datos, realizar devolución de datos a la base de datos, actualizar operaciones, etc.

La segunda explicación

Los datos se pueden leer desde la fuente de datos usando DataReader y DataSet. El DataReader en sí se construye mediante el método IDbCommand.ExecuteReader(); el DataSet se completa mediante el método DbDataAdapter.Fill(). Además, existen diferencias obvias en los métodos de trabajo de los dos: el proceso de ejecución de DataReader no se puede separar de la conexión de la base de datos, es decir, el método IDbConnection.Close () no se puede utilizar para cerrar la conexión de la base de datos cuando DataReader lee datos. ; y cuando use DataSet para obtener datos, puede desconectarse de la base de datos, porque en este momento DbDataAdapter ya es responsable de obtener los datos en el servidor de aplicaciones.

Debido a esta diferencia, se debe prestar especial atención al desarrollar programas relacionados con bases de datos. Por ejemplo, después de usar DataReader para obtener datos, debe cerrar activamente la conexión de la base de datos; de lo contrario, puede ocurrir una excepción de desbordamiento del grupo de conexiones de la base de datos.

La tercera explicación

Puedes utilizar objetos de la clase DataReader u objetos de la clase DataSet para leer datos de la base de datos, pero son diferentes. Se pueden resumir de la siguiente manera:

1. DataReader es una clase de proveedor de gestión de datos, mientras que DataSet es una clase de datos general.

2. DataSet necesita completar el puente DataAdapter para obtener datos. Dado que DataReader en sí es un proveedor de administración, puede obtener datos a través del método ExecuteReader () de Command.

3. DataReader es un proceso en línea y no puede leer datos cuando la conexión está cerrada; DataSet puede procesar datos sin conexión. Copia los datos de la base de datos al almacenamiento local y aún se pueden leer cuando la conexión está cerrada. Procese datos en un DataSet e incluso agregue límites a las tablas almacenadas localmente.

4. DataReader solo puede leer datos hacia adelante, pero no puede modificar datos; DataSet puede leer filas en cualquier orden, buscar, ordenar y filtrar estas filas de manera flexible, e incluso cambiar estas filas. luego sincronizado con la base de datos.

5. Leer datos de DataReader es más rápido que DataSet.

6. Dado que DataSet se procesa fuera de línea, DataSet no se puede utilizar cuando la base de datos está bloqueada durante el procesamiento de transacciones. Porque cuando se llena el DataSet, la conexión a la base de datos se desconectará automáticamente y ya no es posible bloquear la base de datos en este momento.

Se puede ver que, en circunstancias normales, DataSet y DataReader pueden sustituirse entre sí. Cuando existen requisitos específicos, se requiere un análisis cuidadoso para determinar qué método es más apropiado.

La diferencia más fundamental entre DataReader y DataSet es que uno se procesa en línea y el otro se procesa fuera de línea. Cuando está en línea, obtiene los datos reales actuales de la base de datos, pero si está siempre en línea, aumenta la carga de comunicación en la red. Después de estar fuera de línea, los datos se copian localmente, lo que puede reducir la carga en la red y hacer que sea más conveniente para el programa procesar los datos. Si el tiempo fuera de línea es demasiado largo, es posible que los datos que vea no sean datos reales.

Experiencia complementaria: use DataSet y DataReader juntos para grandes cantidades de datos. Cuando la cantidad de datos en una sola tabla es grande, usar DataSet es una opción muy imprudente, porque DataSet almacena datos en forma de DataTable. memoria. Poner una gran cantidad de datos en la memoria a la vez requiere mucha memoria. En comparación con DataSet, DataReader es mucho más elegante. Solo lee un dato a la vez y luego llama al mecanismo en un bucle. Pero también tiene la desventaja de que no está relativamente desconectado, pero esto es beneficioso en términos de consumo de memoria. DataSet también tiene sus propias ventajas en la mayoría de los escenarios de aplicaciones, como desacoplamiento completo, operación única, operación de modelo de dominio, etc.

Por lo tanto, estos dos objetos deben usarse razonablemente según diferentes escenarios.