none
SELECT Consultas en DATASETS RRS feed

  • Pregunta

  • Buenos días,

    Resulta que mi servidor se está quedando colgado por tantas consulta que están realizando los usuarios constantemente y llevan mi servidor al punto de usar CPU al 100%. Tengo MYSQL 5.1.
    Una opción que veo es tener un Dataset y hacer consultas a este dataset. Pero no sé como lo puedo hacer me refiero a hacer un SELECT a un dataset en vez de ejecutar una consulta al mysql.

    Gracias espero comentarios y mucha ayuda.

    Apenas estoy comenzando como programador y nunca había sufrido tantos percances programando.

    GRACIAS A TODOS POR RESPONDER


    La tecnologia te envuelve
    miércoles, 4 de noviembre de 2009 15:52

Respuestas

  • Según esta respuesta no hay manera de hacer una consulta a un daset :(.


    Sí, la consulta Linq _ES_ una consulta a un DataSet. Te pongo un ejemplo:

    //Ejemplo de construcción del DataSet.
    //En tu caso, lo construirías a partir de la base de datos
    DataSet ds = new DataSet();
    ds.Tables.Add("Producto");
    DataTable tabla = ds.Tables["Producto"];
    tabla.Columns.Add("Nombre",  typeof(string));
    tabla.Columns.Add("Precio", typeof(decimal));
    tabla.Rows.Add("Algo", 689.89m);
    tabla.Rows.Add("Otracosa",  21.35m);
    tabla.Rows.Add("Terceraprueba",  79.99m);
    // //ESTA ES LA CONSULTA SOBE EL DATASET var query = from fila in tabla.AsEnumerable() where fila.Field<decimal>("Precio") > 60 orderby fila.Field<decimal>("Precio") descending select fila; // //Mostrar los datos (en este ejemplo, en la consola). foreach (var laFila in query) { Console.WriteLine("{0}: {1:c}", laFila["Nombre"], laFila["Precio"]); }



    Aparte de eso, hay un método Select que puede aplicar sobre una tabla del dataset, pero está muy limitado. Entre otras cosas, no permite hacer un "join" de dos tablas, cosa que sí que podrías hacer con LINQ.

    • Editado Alberto PoblacionMVP jueves, 5 de noviembre de 2009 7:06 El código se veia mal
    • Marcado como respuesta xGs_Manco martes, 12 de julio de 2011 16:24
    jueves, 5 de noviembre de 2009 7:04

Todas las respuestas

  • ¿Estás usando Visual Studio 2008? Si es así, lo más flexible probablemente sería usar LINQ-to-Datasets, para hacer consultas sobre el dataset ya cargado en memoria. Pero ten presente que LINQ en general resolverá las consultas examinando secuencialmente los datos del dataset; no es capaz de optimizar las consultas usando índices como ocurre en el servidor de base de datos.

     

    miércoles, 4 de noviembre de 2009 20:08
  • Según esta respuesta no hay manera de hacer una consulta a un daset :(.

    ?
    La tecnologia te envuelve
    jueves, 5 de noviembre de 2009 2:35
  • hola

    Como bien comenta Alberto si hay posibilidad de hacer la consulta, la alternativa que te da es tambien desde mi punto de vista la mejor y mas flexible.



    Una consulta:

    - cuando dices dataset te refieres a un objeto desconectado de la db, no?
    o sea en un paso previo realizaras una consulta y cargaras todos lo registros de una vez para tenerlos disponibles siempre en memoria, y luego ante una consulta recurrir a este cache de datos y no a la db.

    esta es la idea no?
    o sea ir siempre contra el dataset y no mas contra la db 


    Otra alternativa por ahi puede ayudar es usar el metodo Select del datatable
    algo que por ahi es bueno aclarar es que seguramente los filtros los apliques siempre al datatable no al dataset en si mismo aunque este este contenido.


    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 5 de noviembre de 2009 3:45
  • Según esta respuesta no hay manera de hacer una consulta a un daset :(.


    Sí, la consulta Linq _ES_ una consulta a un DataSet. Te pongo un ejemplo:

    //Ejemplo de construcción del DataSet.
    //En tu caso, lo construirías a partir de la base de datos
    DataSet ds = new DataSet();
    ds.Tables.Add("Producto");
    DataTable tabla = ds.Tables["Producto"];
    tabla.Columns.Add("Nombre",  typeof(string));
    tabla.Columns.Add("Precio", typeof(decimal));
    tabla.Rows.Add("Algo", 689.89m);
    tabla.Rows.Add("Otracosa",  21.35m);
    tabla.Rows.Add("Terceraprueba",  79.99m);
    // //ESTA ES LA CONSULTA SOBE EL DATASET var query = from fila in tabla.AsEnumerable() where fila.Field<decimal>("Precio") > 60 orderby fila.Field<decimal>("Precio") descending select fila; // //Mostrar los datos (en este ejemplo, en la consola). foreach (var laFila in query) { Console.WriteLine("{0}: {1:c}", laFila["Nombre"], laFila["Precio"]); }



    Aparte de eso, hay un método Select que puede aplicar sobre una tabla del dataset, pero está muy limitado. Entre otras cosas, no permite hacer un "join" de dos tablas, cosa que sí que podrías hacer con LINQ.

    • Editado Alberto PoblacionMVP jueves, 5 de noviembre de 2009 7:06 El código se veia mal
    • Marcado como respuesta xGs_Manco martes, 12 de julio de 2011 16:24
    jueves, 5 de noviembre de 2009 7:04