none
Duda entre usar datasets y datareaders

    Pregunta

  • Hola a todos:

    Tengo una duda sobre los datasets y si es mejor usarlos cuando se utilizan a la vez varias conexiones remotas. En mi caso, siempre utilizo datareaders por velocidad, etc. y únicamente utilizo datasets para el relleno de los informes ya que los mismos no necesitan una base de datos para funcionar en cualquier ordenador.

    En mi aplicación se realizan muchísimas consultas selects en unos segundos y a su vez se realizan sus updates cargados en este caso en las tablas mediantes listas genéricas.

    Ahora la duda la tengo en que si un usuario, mete el software en el servidor y quiere conectarse desde varios puntos remotos a ese servidor, podría ser que tuviera problemas con la conexión. Si es verdad, que la conexión antes citada se realiza una sola vez y demora unos 28 segundos, después simplemente es ir mostrando datos en las grillas o cuadros de texto.

    Por lo tanto no se si para este caso de conexión remota es mejor trabajar desconectado aunque la merma de tiempo será siempre superior a trabajar con conexión directa, o bien, continuar como estoy, es decir, trabajando con datareaders que me funcionan a la perfección.

    Por ello y resumiendo, si hay una conexión (Universidad) por ejemplo a una base de datos compact o sql en la que todos los alumnos acceden a la misma base de datos, sería mejor los datasets o los datareaders.

    Un saludo a todos.

    Gemma

    viernes, 9 de diciembre de 2016 15:58

Respuestas

  • Una puntualización importante sobre los DataSets/DataReaders: cuando trabajas con DataSets, lo que haces normalmente es cargarlos mediante un DataAdapter. Pues bien, por dentro el DataAdapter lo que usa es un DataReader. Así que, si estás usando correctamente el DataReader, es decir, se abre, se usa y se cierra inmediatamente, pues entonces estás haciendo exactamente lo mismo que hace internamente el DataAdapter. Por lo tanto, desde este punto de vista, no existe ninguna diferencia entre usar un DataReader o un DataAdapter, ambos hacen exactamente lo mismo con las conexiones.
    • Marcado como respuesta gemma_campillo viernes, 9 de diciembre de 2016 19:11
    viernes, 9 de diciembre de 2016 19:01
  • "gemma_campillo" escribió:

    > Tengo una duda sobre los datasets y si es mejor usarlos cuando se utilizan
    > a la vez varias conexiones remotas. En mi caso, siempre utilizo datareaders
    > por velocidad, etc. y únicamente utilizo datasets para el relleno de los
    > informes ya que los mismos no necesitan una base de datos para funcionar en
    > cualquier ordenador.

    Aparte de lo comentado por Alberto, tienes que tener en cuenta que un adaptador de datos se utiliza para cargar en memoria un objeto DataSet (con uno o varios objetos DataTable), o para cargar un simple objeto DataTable. En definitiva, que los datos estarán en memoria hasta que no los elimines de ella, cosa que no sucede cuando recuperas datos mediante un objeto DataReader.

    > En mi aplicación se realizan muchísimas consultas selects en unos segundos
    > y a su vez se realizan sus updates cargados en este caso en las tablas
    > mediantes listas genéricas.

    Si esos "Updates" que comentas los ejecutas directamente mediante una consulta SQL de actualización (UPDATE Tabla ...), con el método ExecuteNonQuery de un objeto Command debidamente configurado es más que suficiente. Pero si hablamos de actualizar una tabla con los datos existentes en memoria (en un objeto DataSet o DataTable), entonces no te va a quedar más remedio que utilizar el método Update de un adaptador de datos configurado correctamente con el origen de datos al que le pasarías el objeto DataSet o DataTable que proceda.


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Marcado como respuesta gemma_campillo viernes, 9 de diciembre de 2016 20:34
    viernes, 9 de diciembre de 2016 19:24
    Moderador

Todas las respuestas

  • Una puntualización importante sobre los DataSets/DataReaders: cuando trabajas con DataSets, lo que haces normalmente es cargarlos mediante un DataAdapter. Pues bien, por dentro el DataAdapter lo que usa es un DataReader. Así que, si estás usando correctamente el DataReader, es decir, se abre, se usa y se cierra inmediatamente, pues entonces estás haciendo exactamente lo mismo que hace internamente el DataAdapter. Por lo tanto, desde este punto de vista, no existe ninguna diferencia entre usar un DataReader o un DataAdapter, ambos hacen exactamente lo mismo con las conexiones.
    • Marcado como respuesta gemma_campillo viernes, 9 de diciembre de 2016 19:11
    viernes, 9 de diciembre de 2016 19:01
  • Hola querido Alberto:

    Perfectamente aclarada la duda, sigo con mis datareaders que van perfectos.

    Muchas gracias por tu explicación.

    Un abrazo.

    Gemma

    viernes, 9 de diciembre de 2016 19:11
  • "gemma_campillo" escribió:

    > Tengo una duda sobre los datasets y si es mejor usarlos cuando se utilizan
    > a la vez varias conexiones remotas. En mi caso, siempre utilizo datareaders
    > por velocidad, etc. y únicamente utilizo datasets para el relleno de los
    > informes ya que los mismos no necesitan una base de datos para funcionar en
    > cualquier ordenador.

    Aparte de lo comentado por Alberto, tienes que tener en cuenta que un adaptador de datos se utiliza para cargar en memoria un objeto DataSet (con uno o varios objetos DataTable), o para cargar un simple objeto DataTable. En definitiva, que los datos estarán en memoria hasta que no los elimines de ella, cosa que no sucede cuando recuperas datos mediante un objeto DataReader.

    > En mi aplicación se realizan muchísimas consultas selects en unos segundos
    > y a su vez se realizan sus updates cargados en este caso en las tablas
    > mediantes listas genéricas.

    Si esos "Updates" que comentas los ejecutas directamente mediante una consulta SQL de actualización (UPDATE Tabla ...), con el método ExecuteNonQuery de un objeto Command debidamente configurado es más que suficiente. Pero si hablamos de actualizar una tabla con los datos existentes en memoria (en un objeto DataSet o DataTable), entonces no te va a quedar más remedio que utilizar el método Update de un adaptador de datos configurado correctamente con el origen de datos al que le pasarías el objeto DataSet o DataTable que proceda.


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Marcado como respuesta gemma_campillo viernes, 9 de diciembre de 2016 20:34
    viernes, 9 de diciembre de 2016 19:24
    Moderador
  • Hola Enrique:

    Lo dejo tal como está que va muy bien. Efectivamente he estado mirando en la MSDN y en google el tema del dataset, y si es bueno o no usarlo, en mi caso era nada mas por la cantidad de conexiones que utilizo para las selects y si podría tener repercusión si se conectaban varios usuarios a la vez.

    El tema queda suficientemente aclarado y evidentemente te agradezco como siempre tus explicaciones.

    Un fuerte abrazo querido amigo.

    Gemma


    viernes, 9 de diciembre de 2016 20:33