Pregunta de ADO.NET: cuándo usar DataReader, DataAdapter

Me pregunto qué cosas debo tener en cuenta al usar DataReader y DataAdapter para obtener datos de la base de datos y cuál es la diferencia entre estos otros dos. TODO nuestro DAL, nunca usamos dataadapter. Así que me pregunto qué escenario sería mejor usar el combo DataAdapter + Datatable que el uso del DataReader. Gracias por adelantado.

DataReader: este es el mejor uso cuando solo desea obtener datos en modo de lectura, poblar su entidad comercial y cerrar el lector. Esto es realmente rápido.

Supongamos que tiene una clase de cliente y desea tener un objeto completamente iniciado con todas las propiedades de sus clientes rellenadas como (Nombre, Dirección, etc.)

Utilizará DataReader aquí y simplemente rellenará la entidad y cerrará el lector.

No puedes hacer actualización con datareader.

Adaptador de datos: puede leer / actualizar los datos con adaptadores de datos, pero es menos rápido al leer los datos que Datareader.

Puede actualizar los datos con DataAdapter pero con el lector no lo hará

Casi siempre estoy a favor del DataReader cuando hago cosas de ADO.NET también; La razón es que no le obliga a almacenar los datos en el cliente por más tiempo del que debe.

Esa es también la respuesta a cuándo usar un DataAdapter para un DataSet / Table; cuando desea almacenar los datos en el cliente, tal vez para trabajar con ellos de alguna manera – iterando de un lado a otro a través de ellos, o operando en ellos como un conjunto, en lugar de simplemente enviar los valores a una cuadrícula, donde el Reader, IMO, Es una mejor opción.

DataReader permite procesar cada registro y desecharlo, lo que es bueno cuando desea procesar una gran cantidad de registros de datos sin relación entre sí. Por ejemplo, puede usar DataReader cuando desee calcular algún valor estadístico complejo de todos los registros de la base de datos, o guardar una gran cantidad de registros de datos en un archivo local.

DataAdapter es otra cosa, es capaz de permitirle tener registros de datos en la memoria. Eso le permite hacer que la GUI explore datos, edite datos, etc. Es más general pero no funcionará bien con un gran conjunto de datos.

Solo desea utilizar los adaptadores de datos cuando usa conjuntos de datos.
Un adaptador tiene los 2 métodos principales Fill() y Updater() para leer un conjunto de datos y escribirlo en la base de datos.

Tenga en cuenta que Fill() abrirá una conexión, usará un DataReader para obtener todos los registros y luego cerrará la conexión.

Sin Datasets y DataTables no tiene un uso para DataAdapters.

Entonces, la pregunta real es: ¿qué tipo de clases de almacenamiento desea utilizar en su DAL? Los conjuntos de datos son viables y simples, pero es una tecnología antigua (ya no se mejora).

Tal vez debería buscar una biblioteca ORM (Object Relational Mapping). Pero eso reemplazará su pregunta de DataReader / Adapter con una opción mucho más complicada.

Nunca uso DataReader.

Como tengo una capa muy fuerte en mi aplicación, mi DAL es responsable de hablar con la base de datos y mi BLL es responsable de crear objetos, no hay forma de que el BLL cierre el DataReader cuando esté listo. En su lugar, el BLL solicita un DataSet / DataTable del DAL, que el DAL cumple. Para ello, realiza un Relleno (al punto de TomTom> mira el seguimiento de la stack y sí, verás un DataReader allí). El BLL hace lo que le gusta con el conjunto de resultados.

Qué cosas debo tener en cuenta al usar DataReader y DataAdapter

DataReader: Buena interfaz de bajo nivel. Practique mucho la ÚNICA interfaz: si carga datos en estructuras superiores, la carga real siempre se realiza utilizando un DataReader.

DataAdapter / DataSet: cosas que no utilizan las personas a quienes les gustan los progtwigs estructurados y el código agradable y no solo escriben una aplicación de informes. Utilice un ORM en su lugar: NHipernate (bueno), Linq2SQL (malo), Entity Framework (malo) o una de las otras abstracciones mejores.

Supongo que esta pregunta es solo para hablar de proc y contras, y estar fuera del código

* El lector de datos es mucho más rápido que DataAdapter en la obtención de datos, pero debe saber qué es exactamente el modo Desconectado.

* El modo DataReader o Connected y el modo DataAdapter Disconnected se están utilizando en los mismos escenarios, pero algunas veces el modo Desconectado es mejor en caso de que sea una forma de sus datos

* Pero el modo Disconnectiod se proporciona con API ricas como DataAdapter, DataView, DataTable y DataSet. Lo importante es que simplemente proporcione su DataAdapter con SELECT, INSERT, UPDATE, DELETE Command, Adjunte sus datos de una sola tabla o varias tablas, con una línea de código Adapter.Fill (DataTable) o Adapter.Fill (DataSet), y de la misma manera con la actualización del adaptador de datos. Actualización (DataTable)

* Actualizar datos jerárquicos en modo Desconectado es mucho mejor que trabajar en modo conectado que tiene que usar código extra y lógica adicional para mantener, en modo Desconectado usted tiene la capacidad de actualizar Sólo filas insertadas o Filas actualizadas o Filas eliminadas junto a la operación de actualización envuelto dentro de Dot Net Transaction Adapter.Update (DataTable.Select (“”, “”, DataViewRowState.Added))

* en el modo desconectado, tiene la capacidad de obtener las versiones de cada fila en sus datos, junto con los cambios en su DataTable.GetChanges ()

* El modo desconectado le proporciona strongTypedDataSet, por lo que obtiene el esquema de definición de datos y las relaciones, puede obtener filas primarias y secundarias

* El modo desconectado proporciona un método para obtener filas mediante PrimaryKey que también obtiene filas con criterios específicos DataTable.Select (“FilterExpression”, “SortOrder”, DataRowViewState)

* puede realizar cálculos sobre DataTable y no molestar a su servidor con cálculos como seleccionar productID, ProductName, Price, Quantity, price * cantidad como Total, puede agregar fácilmente la columna con criterios específicos (precio * cantidad)

* puede hacer agregaciones o su DataTable arrebatada, DataTable.Compute (“Suma (precio)”, “precio> 250”)

* en modo Desconectado tienes CommandBuilder que crea los comandos sql para ti, pero solo funciona con una sola tabla