none
Consulta sobre eficiencia de código de aplicación en VB NET y base en SQLSERVER RRS feed

  • Pregunta

  • Necesito leer un campo (una columna de una tabla) y dependiendo de su valor puedo o no usar el resto de columnas de la misma tabla. Para obtener dicha fila ejecuto el siguiente código

    Using sqlAdapdador As New SqlDataAdapter("SELECT TOP(1) * FROM Datos", CadenaDeConexion)
          sqlAdapdador.Fill(tabDatos) 

          filaDatos = tabDatos.Rows(0)

          ...Aquí dependiendo del valor de una de las columnas de esa fila puedo o no usar el resto de columnas

    End Using

    La consulta es la siguiente:

    Al ejecutar sqlAdapdador.Fill(tabDatos), filaDatos = tabDatos.Rows(0) se obtiene en memoria todas las columnas de esa fila?

    o estas se van obteniendo a medida que voy usando (asignando por ejemplo) el valor de cada columna?

    Porque hay columnas que no siempre las necesito solo se necesitarian dependiendo del valor de otra columna y no es lo mismo leer una columna que contiene un número que leer una columna que contiene una imagen.

    En otras palabras quiero saber si es eficiente usar Fill si hay columnas pesadas que no necesariamente necesito.


    • Editado James-2016 viernes, 19 de agosto de 2016 2:06
    viernes, 19 de agosto de 2016 1:51

Respuestas

  • James-2016,

    Primero, el objeto de tipo SqlDataAdapter recupera datos de un origen de datos una vez ejecutado el método Fill(), se entiende que todas las columnas definidas en la consulta sql <SELECT> son recuperadas y asignadas a un objeto de tipo DATASET, no hay una carga de columnas según demanda.

    Por otro lado, si buscas un mejor rendimiento te recomiendo hacer uso de la clase SqlDataReader, la gestión que realiza de los datos es mucho mas simple y óptima. Sin embargo, tampoco en este enfoque se produce una carga de columnas por demanda, lo que coloques en la lista de selección <SELECT> de la consulta sql serán las columnas recuperadas. Observación final: evita el uso del comodín '*'.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta James-2016 viernes, 19 de agosto de 2016 2:52
    viernes, 19 de agosto de 2016 2:37

Todas las respuestas

  • James-2016,

    Primero, el objeto de tipo SqlDataAdapter recupera datos de un origen de datos una vez ejecutado el método Fill(), se entiende que todas las columnas definidas en la consulta sql <SELECT> son recuperadas y asignadas a un objeto de tipo DATASET, no hay una carga de columnas según demanda.

    Por otro lado, si buscas un mejor rendimiento te recomiendo hacer uso de la clase SqlDataReader, la gestión que realiza de los datos es mucho mas simple y óptima. Sin embargo, tampoco en este enfoque se produce una carga de columnas por demanda, lo que coloques en la lista de selección <SELECT> de la consulta sql serán las columnas recuperadas. Observación final: evita el uso del comodín '*'.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta James-2016 viernes, 19 de agosto de 2016 2:52
    viernes, 19 de agosto de 2016 2:37
  • Ok, gracias.
    viernes, 19 de agosto de 2016 2:52