/// <summary> /// Retorna todas las categorias de la base de datos /// </summary> /// <returns></returns> public Entidades.Categorias GetAll() { //Creamos la conexión a utilizar. //Utilizamos la sentencia Using para asegurarnos de cerrar la conexión y liberar el objeto al salir de esta sección de manera automática SqlConnection oCnn = Presentación.Conexion.CrearConexion(); try { using (oCnn) { //Abrimos conexion oCnn.Open(); //Creamos un comando para obtener todas las categorias de la base de datos SqlCommand oCmd = new SqlCommand(); using (oCmd) { //Asignamos la conexion de trabajo oCmd.Connection = oCnn; //Indicamos la sentencia SQL oCmd.CommandText = "SELECT * FROM Categorias"; //Siempre devolvemos una colección. Es más fácil de manipular y controlar Entidades.Categorias oCategorias = new Entidades.Categorias(); //No retornamos DataSets, siempre utilizamos objetos para hacernos independientes de la estructura de las tablas en el resto de las capas. //Para esto, leemos con el DataReader y creamos los objetos asociados que se esperan try { //Ejecutamos el comando y retornamos los valores SqlDataReader oReader = oCmd.ExecuteReader(); using (oCnn) { while (oReader.Read()) { //Si existe algun valor, creamos el objeto y lo almacenamos en la colección Entidades.Categoria oCategoria = new Entidades.Categoria(); oCategoria.idCategoria = Convert.ToInt32(oReader["idCategoria"]); oCategoria.descripcion = Convert.ToString(oReader["descripcion"]); //Agregamos el objeto a la coleccion de resultados oCategorias.Add(oCategoria); oCategoria = null; } //Retornamos los valores encontrados return(oCategorias); } } finally { //El Finally nos da siempre la oportunidad de liberar la memoria utilizada por los objetos oCategorias = null; } } } } catch (Exception Ex) { Exception ExcepcionManejada = new Exception("Error al obtener los datos de las categorias.", Ex); throw ExcepcionManejada; } }