none
Consulta SQL sobre un DataTable RRS feed

  • Pregunta

  • Hola, un saludo

    Intento lo siguiente:

    Al iniciar un Form cargo una tabla de la base de datos a un DataTable

     

    Public tblProductos As DataTable

     

    Ahora, quiero poder hacer consultas de SQL como si las hiciera a mi base de datos pero directamente al DataTable tblProductos

     

    Select ID, Producto FROM tblProductos

     

    ¿Como puedo hacer esto?

     

    Mi DataTable tblProductos tiene muchos campos y utilizo muchas y diferentes consultas, asi que intento cargar toda la tabla con los registros que voy a utilizar y asi estar haciendo las consultas directamente sobre el datatable si estar accesando a la base de datos en cada una de las consultas.

     

    Un saludo... Gracias

    lunes, 22 de septiembre de 2008 23:41

Respuestas

  • Hola!

     

    Es que normalmente el servidor de SQL se encuentra en equipos remotos... y va igual de bien en las aplicaciones con las que yo he trabajado... y te hablo (en el caso mas grande) de bases de datos con tablas de mas de medio millon de registros y 10 mil usuarios al dia 

     

    Siempre y cuando tengas una buena gestion de la base de datos, tanto de indices como de control de transacciones... no debes tener ningun problema.

     

    Un saludo.

    martes, 23 de septiembre de 2008 18:35
    Moderador

Todas las respuestas

  • Hola...

     

    Osea... te vas a traer la tabla entera y luego vas a consultar sobre esos datos para que vaya mas rapido...

     

    ¿a quien se le ha ocurrido la brillante idea?

     

    Ese modelo de arquitectura no es nada recomendable.

     

    Primero porque hacer consultas contra la base de datos va a ser mas rapido que obligar a la maquina a tener todos los datos en memoria y hacer operaciones con ellos.

     

    ¿sino porque existen las bases de datos?

     

    La decomendacion es mas bien... configurar la base de datos para que cache tus consultas para aumentar el redimiento, por ejemplo usando procedimientos almacenados... que es mas o menos lo mismo que tu propones... pero bien hecho.

     

    Un saludo.

     

    Colabora con el foro: Si este mensaje te es de utilidad marcalo como respuesta.

    Javier Conesa

    MCP - Analista Programador

    Web: http://www.moreplus.es/index.aspx


    martes, 23 de septiembre de 2008 8:01
    Moderador
  • Gracias por tu respuesta

    Si entiendo el punto, el detalle esta cuando el servidor de SQL se encuentra en un equipo remoto, las condiciones para que multiples consultas simultaneas cambian.

     

    Un saludo, Gracias

    martes, 23 de septiembre de 2008 16:38
  • Hola!

     

    Es que normalmente el servidor de SQL se encuentra en equipos remotos... y va igual de bien en las aplicaciones con las que yo he trabajado... y te hablo (en el caso mas grande) de bases de datos con tablas de mas de medio millon de registros y 10 mil usuarios al dia 

     

    Siempre y cuando tengas una buena gestion de la base de datos, tanto de indices como de control de transacciones... no debes tener ningun problema.

     

    Un saludo.

    martes, 23 de septiembre de 2008 18:35
    Moderador
  • Muchas gracias amigo, entonces no se diga más...  gracias por orientarme un poco sobre esto, yo tenia la inquietud de que fuera a ser lento.

     

    Un saludo

     

    martes, 23 de septiembre de 2008 19:16
  • Amigo ...

    He visto la repuesta que haz dejado a Roberto y no resisti el responder, creo que deberias considerar lo siguiente ...

    Es cierto que no es recomendable por uso de memoria el hacer esto ... pero si esta justificado en algunas ocasiones en las que la cantidad de consultas entorpeceran el funcionamiento del motor de bd además sea como sea la bd llegara un momento en que no respondera tan rapido (DeadLocks, Escritura en Disco aun con discos SCSI) ...

    Ojo si ejecutas en Asp.Net si es necesario utilizar esto ya que IIS ralentiza la comunicación con las BD en general.

    las instrucciones son:
        DataTable.Select(Where, Orden)

        DataTable.Compute(Funcion Matematica);

    No olvides

        DataTable = null;

    y Luego para liberar la memoria.

        GC.Collect()

    Mi caso que lo justifica, tengo tablas de 25 Millones de registros y que crecen a razon de 200 registros por segundo ... en este caso si debe hacerse esto.

    Ojo que además si tienes una tabla que se actualize cada segundo es la unica forma de trabajar en ella ya que sus datos no serán validos para el siguiente segundo ... además este metodo disminuye significativamente los bloqueos de bd que en sql server son criticos.

    Saludos



    • Propuesto como respuesta Alejadur jueves, 26 de marzo de 2009 15:04
    jueves, 26 de marzo de 2009 15:03
  • Javier, no se que tipo de programador seas, pero no le puedes dar una respuesta asi al amigo Roberto, porque estas equivocado. En primer lugar trabajar con tablas en memoria otorga una ayuda importante cuando el motor de base de datos contiene miles o millones de registros, incluyendo que muchos usuarios estan haciendo consultas a esa misma base de datos. Me ha tocado la experincia de trabajar con servidores que se encuentran saturados por la cantidad de consultas que le hacen para los distintos software de la empresa, y si a esto le añadimos que por las redes circulan miles de paquetas en forma simultanea, cada consulta SQL tiene un tiempo de respuesta lenta. Cargar una tabla completa en un Data Table es una buena opcion para este tipo de casos.

    Además procesar una tabla en memoria volatil (como lo hace un DataTable) siempre va a ser mas rápido que procesar una tabla en otro servidor.

     

    Orlando Reyes

    Ingeniero Civil Informático

    AngloAmerican

    jueves, 28 de julio de 2011 15:53