none
Duda con try/catch en data access logic RRS feed

  • Pregunta

  • Hola buenas

    En mi capa de acceso a datos deseo tener registro o constancia de cualquier error que pueda surgir en producción, tengo lo siguiente en uno de los métodos, aunque en todos realizo capturas try/catch

        public static List<RestaurantesEntity> GetAll()
        {
            List<RestaurantesEntity> list = new List<RestaurantesEntity>();
    
            try
            {
                using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
                {
                    conn.Open();
                    using (SqlCommand cmd = new SqlCommand("sp_restaurantes_all", conn))
                    {
                        using (SqlDataReader reader = cmd.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                list.Add(Load(reader));
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Log.WriteLogError("RestaurantesEntity GetAll: " + ex.Message);
            }
    
            return list;
        }

    1. ¿Está correctamente realizada la función?

    2. ¿Si se produce una excepción por ejemplo en el list.Add(load(reader)), se invocaría a los 3 Dispose() de los using?

    3. ¿Debería meter el try/catch dentro del using(SqlConnection... )?

    4. Estoy realizando el mismo try/catch en TODOS los métodos de las clases DAL, ¿esto puede llevar algún problema de rendimiento, o no afecta la captura de exepciones en el rendimiento?

    Muchas gracias.

    viernes, 29 de abril de 2016 11:13

Respuestas

  • hola

    >>¿Está correctamente realizada la función?

    si lo veo correcto

    quizas no definiria tantos using, entiendo que con el que englobal la conexion alcanzaria para delimitat el scope de objeto que se conectan a la db

    >>¿Si se produce una excepción por ejemplo en el list.Add(load(reader)), se invocaría a los 3 Dispose() de los using?

    exacto al generarse una exception sales del bloque using y esto hace que los objetos queden listos para ser recolectados por el GC

    >>¿Debería meter el try/catch dentro del using(SqlConnection... )?

    no para nada, el catch es correcto este general en la funcion

    salvo que quieras capturar algun exception en particular de la conexion y tratarla de forma diferencial

    >>¿esto puede llevar algún problema de rendimiento, o no afecta la captura de exepciones en el rendimiento?

    no deberia afectar para nada el rendimiento

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    viernes, 29 de abril de 2016 12:45