2010-09-12 16 views
8

Me pregunto qué cosas tengo que considerar cuando uso DataReader y DataAdapter para obtener datos de la base de datos y cuál es la diferencia entre estos dos lectores de datos que necesitan conexión abierta y el datadapter no ... En nuestros proyectos, estábamos usando DataReader en TODO nuestro DAL, nunca usamos dataadapter. Entonces me pregunto qué escenario sería mejor usar DataAdapter + Datatable combinado que usar DataReader. Gracias por adelantado.ADO.NET Pregunta: Cuándo utilizar DataReader, DataAdapter

Respuesta

3

Casi siempre estoy a favor del DataReader cuando hago cosas ADO.NET; la razón es que no te obliga a almacenar los datos en el cliente más de lo que debes.

Esa también es, en cierto modo, la respuesta a cuándo usar un DataAdapter en un DataSet/Table; cuando desea almacenar los datos en el cliente, tal vez para trabajar con él de alguna manera, iterar hacia adelante y hacia atrás a través de él, u operarlo como un conjunto, en lugar de simplemente generar los valores en una cuadrícula, donde el Reader, IMO, es una mejor opción.

7

DataReader: Esto se utiliza mejor cuando solo quiere buscar datos en modo readony, completar su entidad comercial y cerrar el lector. Esto es realmente rápido

Say supongamos, que está teniendo una clase de clientes y desea tener objeto totalmente initilized con todas sus propiedades llenas de clientes como (nombre, dirección, etc ..)

Utilizará DataReader aquí y sólo poblar la entidad y lector cercano.

No se puede actualizar con el lector de datos.

DataAdapter: Puede leer/actualizar los datos con datadapters pero es menos rápido cuando lee los datos que Datareader.

puede actualizar los datos con adaptador de datos pero con lector de que no va a

1

qué cosas tengo que tener en cuenta al utilizando DataReader y DataAdapter

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

DataAdapter/DataSet: material no utilizado por personas a las que les gustan los programas estructurados y el buen código, y que simplemente no escriben una aplicación de informes. Use un ORM en su lugar - NHipernate (bueno), Linq2SQL (malo), Entity Framework (malo) o una de las otras mejores abstracciones.

3

DataReader le permiten procesar cada registro y tirarlo, 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 cada registro en la base de datos, o guardar muchos 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 la GUI para explorar datos, editar datos, etc. Es más general, pero no funcionará bien con un gran conjunto de datos.

+0

¿Puede el adaptador de datos ser una buena opción en caso de arrojar millones de registros (por ejemplo: 2-3 millones de registros que tengo en mi tabla de datos) en la base de datos ??? –

3

Solo desea utilizar DataAdapters cuando utiliza DataSets.
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 uso para DataAdapters.

Así que la verdadera pregunta es: ¿qué tipo de clases de almacenamiento desea usar en su DAL? Los DataSets son viables y simples, pero es una tecnología obsoleta (ya no mejorada).

Quizás deba buscar una biblioteca ORM (asignación relacional de objetos). Pero eso reemplazará su pregunta de DataReader/Adapter con una opción mucho más complicada.

+0

¿Puede el dapater de datos ser una buena opción en caso de arrojar millones de registros (por ejemplo: 2-3 millones de registros que tengo en mi datatable) en la base de datos? –

+2

Solo intente, hay demasiados factores involucrados. Además, no haga preguntas en los comentarios, este no es un foro. Busque el existente y use el botón Preguntar. –

+0

¿Puede ayudarme con esta pregunta ?: http://stackoverflow.com/questions/37970073/getting-error-while-inserting-datatables-records-in-my-database-table –

2

I nunca use DataReader.

Como doy mucha cobertura a mi aplicación, mi DAL es responsable de hablar con la base de datos y mi BLL es responsable de construir los objetos, no hay forma de que BLL cierre el DataReader cuando esté listo. En cambio, el BLL solicita un DataSet/DataTable del DAL, que el DAL cumple. Para ello, realiza un Relleno (al punto de TomTom> mira el rastro de la pila y sí, verás un DataReader allí). El BLL luego hace lo que le gusta con el conjunto de resultados.

+0

-1: esto no responde la pregunta. El OP no solicitó alternativas a DataReader y DataAdapter. –

+1

No estoy de acuerdo: me preguntó "¿qué escenario sería mejor usar DataAdapter + Datatable combinado que usar DataReader?" Y respondí (o al menos contribuí a la discusión) dando una descripción de la forma en que diseñé las cosas. Si el diseño que he descrito suena como su aplicación, entonces mi sugerencia de usar el DataAdapter sobre el DataReader sería válida. Por cierto, no estoy cacareando el DataReader. Personalmente nunca he tenido motivos para usarlo a menos que llame a la base de datos desde la capa de presentación, lo que no hago. Por favor reconsidere su voto abajo. – Brad

0

supongo que esta pregunta sólo para hablar de proc y contras, y estar fuera de lado el código

* Lector de datos es mucho más rápido que el adaptador de datos en ir a buscar los datos, pero hay que saber lo que es el modo exactamente desconectado

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

* Pero el modo Disconnectiod se proporciona con API enriquecidas como DataAdapter , DataView, DataTable y DataSet. Lo más importante es que simplemente proporcione su DataAdapter con SELECT, INSERT, UPDATE, DELETE Command, Adjunte datos de una sola tabla o varias tablas, con una línea de código Adapter.Fill (DataTable) o Adapter.Fill (DataSet), y la 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 adicional y lógica adicional para mantener, en modo Desconectado tiene la capacidad para actualizar sólo las filas filas insertadas o filas actualizadas o suprimidas lado de operación de actualización se envuelve dentro de la red del punto de transacción Adapter.Update (DataTable.Select ("", "", DataViewRowState.Added))

* en modo desconectado tienes la habilidad de obtener el v ersions de cada fila en sus datos, además de los cambios en sus datos DataTable.GetChanges()

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

* El modo desconectado proporciona el método para Obtener filas de PrimaryKey que también obtiene filas con los criterios específicos DataTable.Seleccione ("FilterExpression", "SortOrder", DataRowViewState)

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

* puede realizar agregaciones o su DataTable, DataTable.Compute arrebatado ("suma precio()", "precio> 250")

* en modo desconectado tiene CommandBuilder que crea los comandos sql para usted, pero solo funciona con una sola tabla