none
El uso de SqlDataReader.Read() es lento o hago algo mas? RRS feed

  • Pregunta

  • Buenas

    Tengo el siguiente codigo:

    public List<DTOProgramacion> fn_Listar()
            {
                List<DTOProgramacion> oLista = new List<DTOProgramacion>();
    
                try
                {
                    using (SqlConnection oSqlConnection = new SqlConnection(oConexion))
                    {
                        using (SqlCommand oSqlCommand = new SqlCommand("Sp_Programacion_Listar", oSqlConnection) { CommandType = CommandType.StoredProcedure })
                        {
                            oSqlConnection.Open();
                            using (SqlDataReader oSqlDataReader = oSqlCommand.ExecuteReader())
                            {
                                while (oSqlDataReader.Read())
                                {
                                    DTOProgramacion oToProgramacion = new DTOProgramacion
                                    {
                                        pr_CodigoProgramacionEvento = Convert.ToInt32(oSqlDataReader["nCodigoProgramacionEvento"]),
                                        pr_CodigoTipoTaller = Convert.ToInt32(oSqlDataReader["nCodigoTipoTaller"]),
                                        pr_CodigoCliente = Convert.ToInt32(oSqlDataReader["nCodigoCliente"]),
                                        pr_CodigoTipoEvento = Convert.ToInt32(oSqlDataReader["nCodigoTipoEvento"]),
                                        pr_NombreProgramacion = Convert.ToString(oSqlDataReader["cNombreProgramacion"]),
                                        pr_NombreComercialCliente = Convert.ToString(oSqlDataReader["cNombreComercialCliente"]),
                                        pr_FechaAsignadoProgramacionEventoDetalle = Convert.ToDateTime(oSqlDataReader["fFechaRegistroProgramacionTaller"]),
                                        pr_LocalProgramacionTaller = Convert.ToString(oSqlDataReader["cLocalProgramacionTaller"]),
                                        pr_SalaProgramacionTaller = Convert.ToString(oSqlDataReader["cSalaProgramacionTaller"]),
                                        pr_DireccionProgramacionTaller = Convert.ToString(oSqlDataReader["cDireccionProgramacionTaller"]),
                                        pr_ContactoLocalProgramacionTaller = Convert.ToString(oSqlDataReader["cContactoLocalProgramacionTaller"]),
                                        pr_TelefonoContactoLocalProgramacionTaller = Convert.ToString(oSqlDataReader["cTelefonoContactoLocalProgramacionTaller"]),
                                        pr_MaterialRotafolioProgramacionTaller = Convert.ToInt32(oSqlDataReader["nMaterialRotafolioProgramacionTaller"]),
                                        pr_MaterialProyectorProgramacionTaller = Convert.ToInt32(oSqlDataReader["nMaterialProyectorProgramacionTaller"]),
                                        pr_MaterialEcranProgramacionTaller = Convert.ToInt32(oSqlDataReader["nMaterialEcranProgramacionTaller"]),
                                        pr_MaterialesProgramacionTaller = Convert.ToString(oSqlDataReader["cMaterialesProgramacionTaller"]),
                                        pr_MaterialLlevadoPorProgramacionTaller = Convert.ToString(oSqlDataReader["cMaterialLlevadoPorProgramacionTaller"]),
                                        pr_EstacionamientoProgramacionTaller = Convert.ToString(oSqlDataReader["cEstacionamientoProgramacionTaller"]),
                                        pr_ObservacionProgramacionTaller = Convert.ToString(oSqlDataReader["cObservacionProgramacionTaller"]),
                                        pr_CantidadIntegrantesProgramacionTaller = Convert.ToInt32(oSqlDataReader["nCantidadIntegrantesProgramacionEvento"]),
                                        pr_EstadoProgramacionTaller = Convert.ToInt32(oSqlDataReader["nEstadoProgramacionTaller"]),
                                        pr_InicioProgramacionEventoConfiguracion = Convert.ToDateTime(oSqlDataReader["fInicioProgramacionEventoConfiguracion"]),
                                        pr_FinProgramacionEventoConfiguracion = Convert.ToDateTime(oSqlDataReader["fFinProgramacionEventoConfiguracion"]),
                                        pr_PatronColorProgramacionEventoConfiguracion = Convert.ToString(oSqlDataReader["cPatronColorProgramacionEventoConfiguracion"]),
                                        pr_ImagenProgramacionEventoConfiguracion = Convert.ToString(oSqlDataReader["cImagenProgramacionEventoConfiguracion"]),
                                        pr_ResaltadoProgramacionEventoConfiguracion = Convert.ToString(oSqlDataReader["cResaltadoProgramacionEventoConfiguracion"]),
                                        pr_NumeroTallerFecha = Convert.ToString(oSqlDataReader["cNumeroTallerFecha"])
                                    };
                                    oLista.Add(oToProgramacion);
                                }
                            }
                        }
                    }
                }
                catch (Exception oException)
                {
                    throw new Exception("Se ha producido un error en el método fn_Listar()", oException);
                }
    
                return oLista;
            }

    Me he dado cuenta de que es demasiado lento, la consulta me devuelve 420, asi que no me parece que sea mucho que digamos.

    La base de datos esta en SQL Azure, estoy trabajando con Visual 2013.

    Habra alguna forma de agilizar desde el Store Procedure (no creo que sea acá el problema), la forma del While?.

    Gracias


    Iparraguirre Meza Kenny

    martes, 19 de enero de 2016 15:16

Respuestas

Todas las respuestas

  • >>La base de datos esta en SQL Azure, estoy trabajando con Visual 2013.

    pero desde donde ejecuta tu cliente ?

    esta dentro del mismo host en azure o esta en tu red local

    porque si esta local y accedes por internet es logico que sea lento, necesita trasmitir los datos por una red lenta como es internet

    >>Habra alguna forma de agilizar desde el Store Procedure (no creo que sea acá el problema), la forma del While?.

    si usas azure no deberias conectarte a la db directo desde el cliente, deberias exponer servicios web, ya sea asmx o WCF

    la idea es que los servicios se conecten local a la db y alli uses el reader, enviando los datoa serializados a xml o json al cliente

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 19 de enero de 2016 15:41
  • Hola

    Se ejecuta localmente desde la máquina cliente hacia el servidor. Asi que desde ya estoy llevando mal el tema. Respecto a los Web Service, si te entiendo bien:

    Cliente -> WS -> Servidor (para consultar y lo contrario para devolver los datos?)

    Tendrás algun ejemplo para poder guiarme.

    Gracias


    Iparraguirre Meza Kenny

    martes, 19 de enero de 2016 15:47
  • >>Asi que desde ya estoy llevando mal el tema

    me temo que si, conectarte directo a la db en internet no es buena idea

    >>Respecto a los Web Service, si te entiendo bien:

    la operacion de consulta y devolver es lo mismo, el cliente realiza un request al servicio web y este le devuelve una respuesta, pero es todo parte de la misma operacion

    lo que aconsejaria es que uses WCF o Web Api (usando asp.net mvc)

    Introducción a Windows CommunicationFoundation

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta tmpDASH martes, 19 de enero de 2016 18:22
    martes, 19 de enero de 2016 16:10
  • Me decidi por WCF, investigando y leyendo pude crear el servicio WFC haciendo un Insert a la base de Azure.

    Probare el resto de Actualizar, listar y eliminar, por ahora tengo que dividirr en capas y usar listas y averiguar como publicar el servicio en Azure y consumirlo desde la nube.

    Una pregunta, con esto me olvidaria del archivo app.config no?, ahi guardaba la conexión.

    Y otra cosa, al final usaria el while de todas formas solo que la llamada es desde el Webservice?

    Gracias Leandro


    Iparraguirre Meza Kenny


    • Editado tmpDASH martes, 19 de enero de 2016 18:24
    martes, 19 de enero de 2016 18:22