UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS COORDINACION DE COMPUTACIÓN



Documentos relacionados
GUÍA DE TRABAJO N 11 LENGUAJE C# Programación de Software Articulación SENA Grado 10 Ing. Néstor Raúl Suarez Perpiñan Página 2 de 11

Tutorial : Hacer Combos Dependientes tipo Departamento Ciudad en ASP. Net

Programación en Capas con VB.net y PostgreSQL

En este ejemplo también vamos a crear la capa Entidades que va a servir para modelar nuestra base de datos.

Practica 7 Conexión a su base de datos. Optativa II

3.- Desarrollo e implementación del sistema.

GUÍA RÁPIDA DE TRABAJOS CON ARCHIVOS.

XAJAX: una librería de AJAX para PHP (parte 1)

APUNTES DE WINDOWS. Windows y sus Elementos INSTITUTO DE CAPACITACIÓN PROFESIONAL. Elementos de Windows

Software de Captura y Validación de Información Cambiaria

MATERIAL 2 EXCEL 2007

Tutorial Servicios Web

Manejo de datos BLOB con PHP y MySQL

Un kilobyte (KB) son 1024 bytes, un Megabyte (MB) son 1024 KB, un Gigabyte son 1024 Mb

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS

SISTEMA DE APARTADO DE SALAS PARA EVENTOS

Aplicaciones Windows con Microsoft Visual Studio

OBJETIVO: Introducción al editor de páginas web Macromedia Dreamweaver.

myappgen Usted Construye la aplicación mientras la ejecuta

Manual etime para supervisores

Introducción. Introducción a NTI Shadow. Información general de la pantalla de Bienvenida

PROYECTO MIS IMÁGENES,

Tutorial de Introducción a la Informática Tema 0 Windows. Windows. 1. Objetivos

Formularios HTML. Elementos de Programación y Lógica

UTILIZACIÓN DE UNA CUENTA DE CORREO ELECTRÓNICO (NUEVO) Acceso al correo electrónico

UNIDAD EJECUTORA DE CONSERVACION VIAL MANUAL DEL USUARIO DEL SISTEMA INTEGRAL DE CONTROL DE PROYECTOS

Una plantilla es un modelo que puede servir como base para muchas hojas de cálculo. Puede incluir tanto datos como formatos.

Estructurar la información dentro del ordenador:

Guía de Laboratorio Base de Datos I.

TUTORIAL APLICACIONES EVOLUTION CON ACTIVEX EVOLINK

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACIÓN

Enviar Felicitación Navideña por con Off. 2007

SUBMÓDULO: MANUAL DE FUNCIONES

BUSINESS OBJECTS EDICIÓN DE REPORTES NIVEL I

11 Conexión a base de datos.

Manual. Sistema De. Plataforma Virtual. Docente. Estudiante MANUAL MANUAL DE MANUAL. del Usuario. Coordinador. MICROSOFT PowerPoint v2.

Tutorial: Primeros Pasos con Subversion

Antes de construir tu base de datos es conveniente saber que tipos de datos vas a almacenar y como distribuirlos.

6.1. Conoce la papelera

Procedimiento para realizar la configuración de Internet Explorer y usar el Sistema de reservaciones Go! Res versión 4.x

RESERVACIONES ONLINE MANUAL DE REFERENCIA

Día 2: Utilizando controles de datos en Visual Studio 2008.

DESCARGA E INSTALACIÓN DE LA DOCUMENTACIÓN PARA LAS CLASES DEL API DE JAVA. CONSULTAR EN LOCAL O EN INTERNET? (CU00910C)

Instructivo de Microsoft Windows

Manual de ayuda para la utilización del Correo Interno en el Campus Virtual

SEPARAR Y ADJUNTAR UNA BASE DE DATOS. Separar una base de datos

USANDO SERVLETS EN UN SERVIDOR WEB RESIN

GUÍA PARA LA INSTALACIÓN DE MOODLE EN UN COMPUTADOR PERSONAL QUE USA EL SISTEMA OPERATIVO MS. WINDOWS

Bases de Datos. Marta Elena Zorrilla Pantaleón Rafael Duque Medina DPTO. DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN

GUIA COMPLEMENTARIA PARA EL USUARIO DE AUTOAUDIT. Versión N 02 Fecha: 2011-Febrero Apartado: Archivos Anexos ARCHIVOS ANEXOS

Desarrollo Web en Entorno Servidor

Administración de la producción. Sesión 10: Gestor de Base de Datos (Access)

Practica 1 Instalación del SGBD. Ing. María Elena Reyes Castellanos. Miguel Ángel Garduño Córdova Isaac Méndez Hernández

PREGUNTAS FRECUENTES SOBRE LOWESLINK DE LOWE S MÉXICO

Ingreso al Sistema Administrador

Manual para usuarios USO DE ONEDRIVE. Universidad Central del Este

La ventana de Microsoft Excel

Tablas y Campos Nuevos

GENERAR DOCUMENTOS HTML USANDO LENGUAJE PHP. EJERCICIO RESUELTO EJEMPLO SENCILLO. (CU00733B)


MANEJANDO FICHEROS Y CARPETAS

PREPARANDO EL ENTORNO DE DESARROLLO PARA PROGRAMAR EN PHP. DESCARGAR E INSTALAR NOTEPAD++ (CU00808B)

Base de Datos Práctica 1.

DESCARGA & VISUALIZACIÓN DE CLASES PARA ALUMNOS

Dirección de Informática y Telecomunicaciones

Manual de iniciación a

Trabajos de Ampliación. Bases de datos NoSQL.

DOCENTES FORMADORES UGEL 03 PRIMARIA

Informática I Notas del curso

Introducción a Visual Studio.Net

Manual de uso y manejo del Escritorio UTPL : Windows 7 Manual de descarga de Ebooks

INSTRUCTIVO PARA EL RESPALDO Y EL ENVÍO DE LAS BASES DEL SISTEMA INFORMÁTICO PERINATAL POR INTERNET

I.- Objetivo. II.- Introducción

SESIÓN 6 INTRODUCCIÓN A WORD.

Boot Camp Manual de instalación y configuración

COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX

**NOTA** las partes tachadas todavía no están escritas, se ira actualizando poco a poco el documento

INSTALACIÓN DE ORACLE 8i (8.1.7) SOBRE NT

INTRODUCCIÓN A LA PROGRAMACIÓN WEB UNIDAD. Estructura de contenidos: cisvirtual@ucv.edu.pe. 1.

Crear la base de datos antes de la instalación de Wordpress.

Manual para Declaración Anual

6 - Recuperar algunos registros (where)

ModusOne. ModusOne Client. Version: 5.2

Instructivo Asesoría Básica Comunidad Virtual SharePoint 2010

CREAR UN BLOG CON BLOGGER

Manual de configuración de Adobe Reader para la validación de la firma de un documento Versión 1.0

Creación de un sistema ABC

ANEXO 2 - RESPALDO Y RESGUARDO DE BASES SIP-G. Anexo 2 Respaldo y resguardo de bases SIP-G

MÓDULO CÉDULAS DE AUDITORÍA DESDE EXCEL

Qué es una máquina virtual?

Instalación del sistema VSControl Total2012

Programa diseñado y creado por Art-Tronic Promotora Audiovisual, S.L.

MODULO DE USUARIOS PARTE 1

PV Applications Manager. Guía del usuario

Combinar comentarios y cambios de varios documentos en un documento

Antes de comenzar con este trámite es muy importante contar con los siguientes requisitos para poder llevar el trámite con éxito:

Manual de Instalación. Sistema FECU S.A.

UNYDOS CONSULTING S.A MANUAL DE USUARIO PLATAFORMA WEB DE INTERPRISE ADMINISTRATIVO 4.0

Para ingresar al mismo debes hacer click en el ícono correspondiente en el panel de control.

Transcripción:

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS COORDINACION DE COMPUTACIÓN CICLO: 02/2015 GUIA DE LABORATORIO #11 Nombre de la Práctica: Aplicaciones en capas en ASP.NET Lugar de Ejecución: Centro de cómputo Tiempo Estimado: 2 horas con 30 minutos MATERIA: Desarrollo de Aplicaciones con Software Propietario I. OBJETIVOS Que el estudiante: 1. Conozca los fundamentos teóricos sobre la programación en capas en ASP.NET 2. Segmente una aplicación en capas y niveles dependiendo de la necesidad que se presente 3. Diferencie las funciones de cada una de las capas en una aplicación II. INTRODUCCIÓN TEÓRICA Aplicaciones en capas en ASP.NET La programación por capas es una arquitectura cliente-servidor en el que el objetivo primordial es la separación de la lógica de negocios de la lógica de diseño; un ejemplo básico de esto consiste en separar la capa de datos de la capa de presentación al usuario. La ventaja principal de este estilo es que el desarrollo se puede llevar a cabo en varios niveles y, en caso de que sobrevenga algún cambio, solo se ataca al nivel requerido sin tener que revisar entre código mezclado. Un buen ejemplo de este método de programación sería el modelo de interconexión de sistemas abiertos. Además, permite distribuir el trabajo de creación de una aplicación por niveles; de este modo, cada grupo de trabajo está totalmente abstraído del resto de niveles, de forma que basta con conocer la API que existe entre niveles. Desarrollo de aplicaciones con software propietario 1 / 33

En el diseño de sistemas informáticos actual se suelen usar las arquitecturas multinivel o Programación por capas. En dichas arquitecturas a cada nivel se le confía una misión simple, lo que permite el diseño de arquitecturas escalables (que pueden ampliarse con facilidad en caso de que las necesidades aumenten). El más utilizado actualmente es el diseño en tres niveles (o en tres capas) Capas y niveles Capa de presentación: la que ve el usuario (también se la denomina "capa de usuario"), presenta el sistema al usuario, le comunica la información y captura la información del usuario en un mínimo de proceso (realiza un filtrado previo para comprobar que no hay errores de formato). También es conocida como interfaz gráfica y debe tener la característica de ser "amigable" (entendible y fácil de usar) para el usuario. Esta capa se comunica únicamente con la capa de negocio. Capa de negocio: es donde residen los programas que se ejecutan, se reciben las peticiones del usuario y se envían las respuestas tras el proceso. Se denomina capa de negocio (e incluso de lógica del negocio) porque es aquí donde se establecen todas las reglas que deben cumplirse. Esta capa se comunica con la capa de presentación, para recibir las solicitudes y presentar los resultados, y con la capa de datos, para solicitar al gestor de base de datos almacenar o recuperar datos de él. También se consideran aquí los programas de aplicación. Capa de datos: es donde residen los datos y es la encargada de acceder a los mismos. Está formada por uno o más gestores de bases de datos que realizan todo el almacenamiento de datos, reciben solicitudes de almacenamiento o recuperación de información desde la capa de negocio. Todas estas capas pueden residir en un único ordenador, si bien lo más usual es que haya una multitud de ordenadores en donde reside la capa de presentación (son los clientes de la arquitectura cliente/servidor). Las capas de negocio y de datos pueden residir en el mismo ordenador, y si el crecimiento de las necesidades lo aconseja se pueden separar en dos o más equipos. Así, si el tamaño o complejidad de la base de datos aumenta, se puede separar en varios ordenadores los cuales recibirán las peticiones del ordenador en que resida la capa de negocio. Si, por el contrario, fuese la complejidad en la capa de negocio lo que obligase a la separación, esta capa de negocio podría residir en uno o más ordenadores que realizarían solicitudes a una única base de datos. En sistemas muy complejos se llega a tener una serie de ordenadores sobre los cuales corre la capa de negocio, y otra serie de ordenadores sobre los cuales corre la base de datos. En una arquitectura de tres niveles, los términos "capas" y "niveles" no significan lo mismo ni son similares. El término "capa" hace referencia a la forma como una solución es segmentada desde el punto de vista lógico: Presentación (Conocida como capa Web en aplicaciones Web o como capa de usuario en Aplicaciones Nativas) Lógica de Negocio. (Conocida como capa Aplicativa) Datos. (Conocida como capa de Base de Datos) Desarrollo de aplicaciones con software propietario 2

En cambio, el término "nivel" corresponde a la forma en que las capas lógicas se encuentran distribuidas de forma física. Por ejemplo: Una solución de tres capas (presentación, lógica del negocio, datos) que residen en un solo ordenador (Presentación+lógica+datos). Se dice que la arquitectura de la solución es de tres capas y un nivel. Una solución de tres capas (presentación, lógica del negocio, datos) que residen en dos ordenadores (presentación+lógica por un lado; lógica+datos por el otro lado). Se dice que la arquitectura de la solución es de tres capas y dos niveles. III. MATERIALES Y EQUIPO Para la realización de la guía de práctica se requerirá lo siguiente: No. Requerimiento Cantidad 1 Guía de práctica #11: Aplicaciones en capas en ASP.NET 1 2 Computadora con Visual Studio 2012 instalado y una instancia de SQL Server con Management Studio Express 1 3 Memoria USB o disco flexible 1 IV. PROCEDIMIENTO Parte 1: Creación de base de datos usando SQL Server 2012 para que funcione como fuente de datos 1. Proceda a descargar los recursos complementarios de esta práctica. 2. Proceda a iniciar la herramienta de Microsoft SQL Server Management Studio instalada en su computadora y desde el Explorador de Objetos, proceda a crear la base de datos Aplicacion_Capas. Luego ejecute el script a continuación, que creara las tablas de la bdd a utilizar. use Aplicacion_Capas create table Usuarios( usuario varchar(20) primary key, password varchar (20) not null, nombre varchar(50) not null, apellido varchar(50) not null, pais int not null, sexo char(1), correo varchar(50), Desarrollo de aplicaciones con software propietario 3

telefono varchar(30) ) GO create table Posts( idpost int identity primary key, nombre varchar(50), descripcion varchar (5000), usuario varchar(20) references Usuarios(usuario) ) GO create table Comentarios( idcomentario int identity, usuario varchar(20) references Usuarios(usuario), idpost int references Posts(idpost) on delete cascade, comentario varchar(5000) not null, hora datetime not null ) 3. Luego de definir la estructura, creara lo siguientes procedimientos almacenados, de tal manera que sea la base de datos la que se encargue de realizar las gestiones de datos sobre la base de datos misma. Ejecute los siguientes bloques de SQL. Si alguno le da error, proceda a ejecutarlos de forma individual. create proc insusuario( @usuario varchar(20), @password varchar (20), @nombre varchar(50), @apellido varchar(50), @pais int, @sexo char(1), @correo varchar(50), @telefono varchar(30) ) as insert into usuarios values(@usuario,@password,@nombre,@apellido,@pais,@sexo,@correo,@telefono) GO Desarrollo de aplicaciones con software propietario 4

create proc inscomentario( @usuario varchar(20), @idpost int, @comentario varchar(5000) ) as insert into comentarios values(@usuario,@idpost,@comentario,getdate()) GO create proc delpost( @idpost int ) as delete from posts where idpost=@idpost GO create proc inspost( @nombre varchar(50), @descripcion varchar(5000), @usuario varchar(20) ) as insert into Posts values (@nombre, @descripcion,@usuario) GO create proc updpost( @nombre varchar(50), @descripcion varchar(5000), @idpost int ) as update posts set nombre = @nombre, descripcion = @descripcion where idpost = @idpost GO Cada uno de los procedimientos anteriores cumple cierta función específica. insusuario: Servira para insertar un usuario a las base de datos. inscomentario: Insertara un comentario realizado por un usuario en un post determinado. delpost: Borrara un post determinado. inspost: Insertara un post a un usuario determinado. updpost: Modificara un post determinado. Desarrollo de aplicaciones con software propietario 5

4. Ahora nos resta únicamente agregar registros a las tablas. Proceda a ejecutar las siguientes instrucciones INSERT. Tenga especial cuidado de verificar adonde inicia y adonde terminan las instrucciones. insert into usuarios values ('pedro','demo','pedro','rodriguez',21,'m','pedrorodriguez@gmail.com','3827982173') insert into usuarios values ('ana','demo','ana','huemil',1,'f','ana_huemil@hotmail.com','384872828') insert into usuarios values ('juan','demo','juan','vazquez',9,'m','juan.vazquez.yahoo.com','323413214') insert into Posts values ('Funcionamiento basico del Foro','Descripcion de Funciones del Foro','juan') insert into Posts values ('Programando en ASP','Programa basico de asp','pedro') insert into Posts values ('Crear un foro basico','hola gente!!! Estoy haciendo un site y en una parte necesito hacer un foro, no tiene que ser nada increible ni nada muy grande, solamente poder postear mensajes y autor del mensaje... El tema es que en este momento me estaba por poner a programarlo y me surgieron varias dudas en cuanto a el funcionamiento, osea donde guardo los mensajes principalmente... Yo tenia penasdo hacer alguna cosa con archivos indexados en una base de datos (mysql) para no cargarla mucho... Pero antes de ponerme a hacer esto me puse a buscar en internet y encontre que en varios lados "enseñan" a crear un foro guardando toda la informacion en la base de datos y armando los "threds" haciendo consultas que filtren todo lo que no es del tema especificado... en estos lugares que comento guardan el texto, osea el cuerpo del mensaje en la base de datos, esto no la enlenteceria???? yo tenia "entendido" que habia que tratar de guardar la menor cantidad de informacion posible en las bases para tarden los menos posible en los manejos que hacen... pero es solo una idea mia, no se si sera verdad o no... Alguien sabe como funcionan los foros posta??? o que me recomiendan hacer??? Este ultimo metodo de guardar todo en la base de datos es extremadamente facil, porque armas los temas con consultas y no te tenes que preocupar de nada... Pero tengo ganas de hacer algo lo mas "aproximado" a la realidad posible... no algo facilongo para salir del paso... Bueno, espero sus propuestas saludos!!!!!!!','pedro') insert into Comentarios values ('ana',3,'hacete un favor y usa algo ya hecho. Con las dudas que tenes, la magnitud del proyecto te supera ampliamente.',getdate()) insert into Comentarios values ('juan',3,'puede que haya algún otro paquete que sea todavía más simple si no estás buscando tantos features..',getdate()) insert into Comentarios values ('pedro',3,'gracias a todos, pero la verdad es que tengo ganas de hacerlo Desarrollo de aplicaciones con software propietario 6

yo, porque es algo MUY simple... osea ni siquiera quiero hacer subforos, osea es un lugar donde se agregan temas y se puede comentar esos temas, no es que entro y tengo 40 subforos... asi que voy a seguir haciendolo por mi cuenta que de paso aprendo... muchas gracias a todos... saludos!',getdate()) insert into Comentarios values ('ana',1,'como se crea un post??',getdate()) insert into Comentarios values ('juan',1,'solo vaz a mis posts y seleccionas crear un post, le das un titulo y una descripcion y por ultimo crear post',getdate()) insert into Comentarios values ('ana',1,'gracias otra pregunta, como se borra un comentario??',getdate()) Parte 2: Creación de conexión desde Visual Studio con el origen de datos. 5. Inicia Microsoft Visual Studio desde su computadora y prepara un nuevo Sitio Web vacio de ASP.NET, bajo el nombre Guia11. 6. Descarga y descomprime los recursos complementarios de esta practica. Luego, copia las subcarpetas de su contenido al interior de la carpeta de tu sitio web del procedimiento. Retorna a la ventana de Visual Studio, dentro del Explorador de Soluciones, da clic secundario sobre el icono del proyecto (Guia11) y selecciona la opción Actualizar carpeta. Confirma que se agregan las carpetas de recursos a la solucion. 7. Agrega en tu sitio web a un proyecto de librería de clases, dando clic en FILE, selecciona opción ADD y de clic en New Project. De la ventana emergente, en los proyectos de C#, ubica la categoría Windows y en la lista, selecciona el tipo de proyecto (Biblioteca de clases Class Library). Por ultimo, asigna Datos como nombre del Proyecto (observa la imagen) y presiona botón Aceptar. Desarrollo de aplicaciones con software propietario 7

8. De la ventana del Explorador de Proyectos, seleccione la clase predeterminada (Class1.cs) y proceda a borrarla de este nuevo proyecto. 9. Al interior de esta librería Datos, agregaremos TODOS los archivos necesarios para la gestión de la comunicación con la base de datos, de tal manera que este sea el único punto de nuestro sitio que tenga acceso a ella. 10. Dentro de la librería agregue una nueva clase con el nombre Configuracion.cs y proceda a digitar el siguiente código. Verifique todos los using que se han adicionado. using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Datos class Configuracion static string cadenaconexion = @"Data Source=localhost;Initial Catalog=Aplicacion_Capas;Integrated Security=True"; public static string CadenaConexion get return cadenaconexion; 11. Siempre al interior de la Libreria de Datos, proceda a crear una nueva clase con el nombre MetodosDatos.cs y proceda a digitar el siguiente código. using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Web; namespace Datos Desarrollo de aplicaciones con software propietario 8

class MetodosDatos public static SqlCommand CrearComando() string _cadenaconexion = Configuracion.CadenaConexion; SqlConnection _conexion = new SqlConnection(); _conexion.connectionstring = _cadenaconexion; SqlCommand _comando = new SqlCommand(); _comando = _conexion.createcommand(); _comando.commandtype = CommandType.Text; return _comando; public static SqlCommand CrearComandoProc(string proc) string _cadenaconexion = Configuracion.CadenaConexion; SqlConnection _conexion = new SqlConnection(_cadenaConexion); SqlCommand _comando = new SqlCommand(proc, _conexion); _comando.commandtype = CommandType.StoredProcedure; return _comando; public static int EjecutarComando(SqlCommand comando) try comando.connection.open(); return comando.executenonquery(); catch throw; finally comando.connection.dispose(); comando.connection.close(); Desarrollo de aplicaciones con software propietario 9

public static DataTable EjecutarComandoSelect(SqlCommand comando) DataTable _tabla = new DataTable(); try comando.connection.open(); SqlDataAdapter adaptador = new SqlDataAdapter(); adaptador.selectcommand = comando; adaptador.fill(_tabla); catch (Exception ex) throw ex; finally comando.connection.close(); return _tabla; 12. Siempre al interior de la libreria de Datos, crearemos una nueva clase en la capa de datos que se llamará AccesoDatos.cs y tendra la funcion de autentificar y registrar a los usuarios. Digite el siguiente código. using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Web; namespace Datos public class AccesoDatos public static int insertarusuario(string usuario, string password, string nombre, string apellido, int pais, char sexo, string correo, string telefono) Desarrollo de aplicaciones con software propietario 10

SqlCommand _comando = MetodosDatos.CrearComandoProc("insUsuario"); _comando.parameters.addwithvalue("@usuario", usuario); _comando.parameters.addwithvalue("@password", password); _comando.parameters.addwithvalue("@nombre", nombre); _comando.parameters.addwithvalue("@apellido", apellido); _comando.parameters.addwithvalue("@pais", pais); _comando.parameters.addwithvalue("@sexo", sexo); _comando.parameters.addwithvalue("@correo", correo); _comando.parameters.addwithvalue("@telefono", telefono); return MetodosDatos.EjecutarComando(_comando); public static DataTable verificarusuario(string usuario, string pass) SqlCommand _comando = MetodosDatos.CrearComando(); _comando.commandtext = "SELECT usuario FROM usuarios WHERE usuario = '" + usuario + "' AND password = '" + pass + "'"; return MetodosDatos.EjecutarComandoSelect(_comando); 13. Siempre al interior de la librería de Datos, crearemos una carpeta nueva que contendrá los métodos ordenados por formulario. Haga click derecho en la capa de Datos y seleccionar Agregar. En el menú emergente nueva carpeta, coloca el nombre Views. Hasta este momento, su estructura debe verse como sigue: 14. Al interior de la carpeta Views del paso anterior, creará una clase llamada miscomentariosdatos.cs, y procederá a digitar el siguiente código: Desarrollo de aplicaciones con software propietario 11

using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Web; namespace Datos.Views public class miscomentariosdatos public static DataTable ObtenerComentarios(string usuario) SqlCommand _comando = MetodosDatos.CrearComando(); _comando.commandtext = "SELECT hora, nombre, comentario FROM comentarios INNER JOIN posts ON comentarios.idpost = posts.idpost WHERE comentarios.usuario = '" + usuario + "'"; return MetodosDatos.EjecutarComandoSelect(_comando); 15. De nuevo en la carpeta Views, crea otra clase llamada miperfildatos.cs y proceda a digitar el siguiente código: using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Web; namespace Datos.Views public class miperfildatos Desarrollo de aplicaciones con software propietario 12

+ "'"; public static DataTable obtenerdatos(string usuario) SqlCommand _comando = MetodosDatos.CrearComando(); _comando.commandtext = "SELECT * FROM Usuarios WHERE usuario ='" + usuario return MetodosDatos.EjecutarComandoSelect(_comando); 16. En la carpeta Views, agregue otra clase llamada mispostsdatos.cs, y procederá a digitar el siguiente código: using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Web; namespace Datos.Views public class mispostsdatos public static DataTable obtenermisposts(string usuario) SqlCommand _comando = MetodosDatos.CrearComando(); _comando.commandtext = "SELECT idpost,nombre,descripcion FROM posts WHERE usuario = '" + usuario + "'"; return MetodosDatos.EjecutarComandoSelect(_comando); public static int eliminarpost(int post) SqlCommand _comando = MetodosDatos.CrearComandoProc("delPost"); _comando.parameters.addwithvalue("@idpost", post); return MetodosDatos.EjecutarComando(_comando); Desarrollo de aplicaciones con software propietario 13

public static int insertarpost(string nombre, string descripcion, string usuario) SqlCommand _comando = MetodosDatos.CrearComandoProc("insPost"); _comando.parameters.addwithvalue("@nombre", nombre); _comando.parameters.addwithvalue("@descripcion", descripcion); _comando.parameters.addwithvalue("@usuario", usuario); return MetodosDatos.EjecutarComando(_comando); public static int actualizarpost(string nombre, string descripcion, int post) SqlCommand _comando = MetodosDatos.CrearComandoProc("updPost"); _comando.parameters.addwithvalue("@nombre", nombre); _comando.parameters.addwithvalue("@descripcion", descripcion); _comando.parameters.addwithvalue("@idpost", post); return MetodosDatos.EjecutarComando(_comando); public static DataTable obtenerdatosposts(int post) SqlCommand _comando = MetodosDatos.CrearComando(); _comando.commandtext = "SELECT nombre,descripcion FROM posts WHERE idpost = " + post; return MetodosDatos.EjecutarComandoSelect(_comando); 17. En la carpeta Views, agregue una nueva clase llamada todospostsdatos.cs y proceda a digitar el siguiente código: using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Web; Desarrollo de aplicaciones con software propietario 14

namespace Datos.Views public class todospostsdatos public static DataTable obtenertodosposts() SqlCommand _comando = MetodosDatos.CrearComando(); _comando.commandtext = "SELECT * FROM posts"; return MetodosDatos.EjecutarComandoSelect(_comando); public static DataTable obtenerinfopost(int post) SqlCommand _comando = MetodosDatos.CrearComando(); _comando.commandtext = "SELECT * FROM posts WHERE idpost=" + post; return MetodosDatos.EjecutarComandoSelect(_comando); public static DataTable obtenercomentarios(int post) SqlCommand _comando = MetodosDatos.CrearComando(); _comando.commandtext = "SELECT * FROM comentarios WHERE idpost=" + post; return MetodosDatos.EjecutarComandoSelect(_comando); public static int insertarcomentario(string usuario, int post, string comentario) SqlCommand _comando = MetodosDatos.CrearComandoProc("insComentario"); _comando.parameters.addwithvalue("@usuario", usuario); _comando.parameters.addwithvalue("@idpost", post); _comando.parameters.addwithvalue("@comentario", comentario); return MetodosDatos.EjecutarComando(_comando); Desarrollo de aplicaciones con software propietario 15

18. Hasta el momento, hemos definido toda nuestra capa de datos. Ahora es necesario implementar la manera en que debemos consumir dichas clases. Dentro de la solución agregue otra (Librería de Clase / Class Library) con el nombre Negocio 19. Luego, para que nuestra clase Negocio utilice las librerías de clases de Datos que hemos creado, debemos agregar la referencia a nuestro proyecto. En el Explorador de Soluciones, haga clic secundario en el nombre de la librería de clase Negocio, luego seleccione Agregar referencia En la nueva ventana, ubique a la izquierda a la opción Solucion y marque Datos. Confirme en Aceptar. 20. Luego, en el Explorador de Objetos, de clic sobre la carpeta de esta librería Negocios y agregue una nueva clase con el nombre AccesoLogica.cs. Aquí proceda a digitar el siguiente código: using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Web; using Datos; namespace Negocio Desarrollo de aplicaciones con software propietario 16

public class AccesoLogica public static bool insertarusuario(string usuario, string password, string nombre, string apellido, int pais, char sexo, string correo, string telefono) try if (AccesoDatos.insertarUsuario(usuario, password, nombre, apellido, pais, sexo, correo, telefono)!= 0) catch else return true; return false; return false; public static bool verificarusuario(string usuario, string pass) try DataTable datos = AccesoDatos.verificarUsuario(usuario, pass); if (datos.rows.count!= 0) return true; else return false; catch return false; Desarrollo de aplicaciones con software propietario 17

21. Ahora, crearemos las clases de lógica para cada vista. Cree una nueva carpeta dentro de la librería Negocio a la que llamará Views. Dentro de esta agregue una clase llamada miscomentariosneg.cs y proceda a digitar el siguiente código. using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Web; using Datos; using Datos.Views; namespace Negocio.Views class miscomentariosneg public static DataTable obtenercomentarios(string usuario) return miscomentariosdatos.obtenercomentarios(usuario); 22. Al interior de la carpeta Views, crea otra clase llamada mispostsneg.cs y procede a digitar el siguiente código: using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Web; using Datos.Views; Desarrollo de aplicaciones con software propietario 18

namespace Negocio.Views public class mispostsneg public static DataTable obtenermisposts(string usuario) return mispostsdatos.obtenermisposts(usuario); public static DataTable obtenerdatosposts(int post) return mispostsdatos.obtenerdatosposts(post); public static bool eliminarpost(int post) try if (mispostsdatos.eliminarpost(post)!= 0) return true; else return false; catch return false; public static bool insertarpost(string nombre, string descripcion, string usuario) try if (mispostsdatos.insertarpost(nombre, descripcion, usuario)!= 0) else return true; Desarrollo de aplicaciones con software propietario 19

return false; catch return false; public static bool actualizarpost(string nombre, string descripcion, int post) try if (mispostsdatos.actualizarpost(nombre, descripcion, post)!= 0) return true; else return false; catch return false; 23. Al interior de la carpeta Views, crea una clase llamada perfilneg.cs. Procede a digitar el siguiente código: using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Web; using Datos.Views; namespace Negocio.Views Desarrollo de aplicaciones con software propietario 20

public class perfilneg public static DataTable obtenerdatos(string usuario) return miperfildatos.obtenerdatos(usuario); 24. Al interior de la carpeta View creará una clase llamada todospostneg.cs, y procederá a digitar el siguiente código: using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Web; using Datos.Views; namespace Negocio.Views class todospostneg public static DataTable obtenertodosposts() return todospostsdatos.obtenertodosposts(); public static DataTable obtenerinfopost(int post) return todospostsdatos.obtenerinfopost(post); public static DataTable obtenercomentarios(int post) Desarrollo de aplicaciones con software propietario 21

return todospostsdatos.obtenercomentarios(post); public static bool insertarcomentario(string usuario, int post, string comentario) try if (todospostsdatos.insertarcomentario(usuario, post, comentario)!= 0) return true; else return false; catch return false; public static string depurarcomentario(string str) string temp = str.replace("<", ""); temp = temp.replace(">", ""); temp = temp.replace("&", ""); return temp; 25. Ahora, procederemos a la creación de las vistas. En el explorador de soluciones, ubique el icono de la solucion principal Guia11 y agregue un nuevo Web Form con el nombre Default.aspx. Proceda a digitar el siguiente código. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" Desarrollo de aplicaciones con software propietario 22

"http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head runat="server"> </head> <body> <title></title> <link href="~/styles/site.css" rel="stylesheet" type="text/css" /> <form runat="server"> <div class="page"> <div class="header"> <div class="title"> <h1> </h1> FORO TRES CAPAS ASP.NET <div class="clear hideskiplink"> <asp:menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal"> <Items> <asp:menuitem NavigateUrl="~/Principal.aspx" Text="Home"/> <asp:menuitem NavigateUrl="~/About.aspx" Text="Acerca"/> </Items> </asp:menu> <div class="main"> <h2> </h2> <div> Inicio de Sesión <asp:panel ID="pandefaultbtn" runat="server" DefaultButton="btnEntrar"> <fieldset class="login"> <label>usuario</label> <asp:textbox ID="txtusuario" runat="server" CssClass="textEntry"></asp:TextBox> <label>contraseña</label> Desarrollo de aplicaciones con software propietario 23

<asp:textbox ID="txtPassword" TextMode="Password" runat="server" CssClass="passwordEntry"></asp:TextBox> <div class="clear"> <p></p> <asp:imagebutton ID="btnEntrar" ImageUrl="~/images/login.png" runat="server" Height="40px" Width="134px" /> <asp:imagebutton ID="btnRegistrar" ImageUrl="~/images/register.png" runat="server" Height="38px" Width="150px" /> <asp:label ID="lblMsg" runat="server" Font-Names="Impact" Font- Overline="False" Font-Strikeout="False" ForeColor="Maroon"></asp:Label> </fieldset> </asp:panel> <br /> <div class="clear"> <div class="footer"> </form> </body> </html> 26. Para que nuestro sitio web pueda utilizar las librerías de clases que hemos creado, debemos agregar la referencia a nuestro proyecto. En el explorador de soluciones, haga clic con el botón secundario del mouse en el nombre del proyecto Guia11. A continuación, haga clic en Agregar referencia web y seleccione a Negocio. Desarrollo de aplicaciones con software propietario 24

27. Ya podemos agregar el espacio de nombre a todos nuestros proyectos. Ingrese al archivo Default.aspx.cs de la pag. anterior y agregue la referencia (resaltada a continuacion) hacia nuestra librería de clases (Negocios) 28. Ahora, en el evento PageLoad de la página Default digite el siguiente código: protected void Page_Load(object sender, EventArgs e) if (!string.isnullorempty((string)session["statusmessage"])) string mensaje = (string)session["statusmessage"]; Session["StatusMessage"] = null; Response.Write("<script type='text/javascript'>// <![CDATA[alert(\""+mensaje+"\")// ]]></script>"); 29. De manera similar, digite el siguiente código en los respectivos eventos de los botones de esta pagina Default Desarrollo de aplicaciones con software propietario 25

protected void btnregistrar_click(object sender, ImageClickEventArgs e) Session["CrearUsuario"] = "Valido"; Response.Redirect("~/Registro.aspx"); protected void btnentrar_click(object sender, ImageClickEventArgs e) if (AccesoLogica.verificarUsuario(txtusuario.Text, txtpassword.text)) Session["Start"] = 0; Session["Nombre"] = txtusuario.text; Response.Redirect("~/Views/Perfil.aspx"); else lblmsg.text = "Password o Usuario incorrecto"; 30. Cree una nueva página con el nombre de Registro.aspx y proceda a digitar el siguiente marcado: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Registro.aspx.cs" Inherits="Registro" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head runat="server"> </head> <body> <title></title> <link href="~/styles/site.css" rel="stylesheet" type="text/css" /> <form runat="server"> <div class="page"> <div class="header"> <div class="title"> Desarrollo de aplicaciones con software propietario 26

<h1> FORO TRES CAPAS ASP.NET </h1> <div class="main"> <h2> Registro de usuarios </h2> <div> <asp:panel ID="pandefaultbtn" runat="server" DefaultButton="Button1"> <fieldset class="register"> <label>usuario</label> <asp:textbox ID="txtusuario" runat="server" CssClass="textEntry"></asp:TextBox> <label>contraseña</label> <asp:textbox ID="txtPassword" TextMode="Password" runat="server" CssClass="passwordEntry"></asp:TextBox> <label>nombres</label> <asp:textbox ID="txtNombre" runat="server" CssClass="textEntry"></asp:TextBox> <label>apellidos</label> <asp:textbox ID="txtApellido" runat="server" CssClass="passwordEntry"></asp:TextBox> CssClass="textEntry"> <label>país</label> <asp:dropdownlist ID="ddlPaises" runat="server" <asp:listitem Value="1">El Salvador</asp:ListItem> <asp:listitem Value="2">Guatemala</asp:ListItem> <asp:listitem Value="3">Honduras</asp:ListItem> <asp:listitem Value="4">Nicaragua</asp:ListItem> <asp:listitem Value="5">Costa Rica</asp:ListItem> <asp:listitem Value="6">Panamá</asp:ListItem> </asp:dropdownlist> <label>sexo</label> <asp:dropdownlist ID="ddlSexo" runat="server"> <asp:listitem Value="M">Masculino</asp:ListItem> Desarrollo de aplicaciones con software propietario 27

<asp:listitem Value="F">Femenino</asp:ListItem> </asp:dropdownlist> <label>e-mail</label> <asp:textbox ID="txtCorreo" runat="server" CssClass="textEntry"></asp:TextBox> <label>teléfono</label> <asp:textbox ID="txtTelefono" runat="server" CssClass="passwordEntry"></asp:TextBox> <div class="clear"> <p></p> <asp:button ID="Button1" runat="server" Text="Registrar" CssClass="submitButton" OnClick="Button1_Click" /> Strikeout="False" <asp:label ID="lblMsg" runat="server" Font-Overline="False" Font- ForeColor="Maroon"></asp:Label> </fieldset> </asp:panel> <br /> <div class="clear"> <div class="footer"> </form> </body> </html> Desarrollo de aplicaciones con software propietario 28

31. Ingrese al código del archivo (Registro.aspx.cs) de la pagina anterior e incluya la referencia al namespace Negocio. Luego, programe el evento clic del botón Registrar (Button1) de la pagina anterior de la siguiente manera: protected void Button1_Click(object sender, EventArgs e) if (AccesoLogica.insertarUsuario(txtusuario.Text, txtpassword.text, txtnombre.text, txtapellido.text, int.parse(ddlpaises.selectedvalue.tostring()), char.parse(ddlsexo.selectedvalue), txtcorreo.text, txttelefono.text)) Session["Start"] = 0; Session["Nombre"] = txtusuario.text; Response.Redirect("~/Views/Perfil.aspx"); else lblmsg.text = "Error al ingresar registro. Verifique"; 32. Ahora, cree una carpeta llamada Views. Aquí crearemos dos de las vistas a utilizar en nuestro proyecto. Dentro de esta carpeta cree la página Perfil.aspx y digite el siguiente marcado: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Perfil.aspx.cs" Inherits="Views_Perfil" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head runat="server"> </head> <body> <title></title> <link href="~/styles/site.css" rel="stylesheet" type="text/css" /> <form runat="server"> <div class="page"> <div class="header"> Desarrollo de aplicaciones con software propietario 29

<div class="title"> <h1> </h1> FORO TRES CAPAS ASP.NET <div class="clear hideskiplink"> <asp:menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal"> <Items> <asp:menuitem Text="Inicio"></asp:MenuItem> NavigateUrl="~/Default.aspx" <asp:menuitem NavigateUrl="~/Views/Perfil.aspx" Text="Mi Perfil"/> <asp:menuitem NavigateUrl="~/Views/MisPost.aspx" Text="Mis Post"/> </Items> </asp:menu> <div class="main"> <h2> </h2> Mi Perfil <div class="rounded_corners"> <asp:detailsview ID="DetailsView1" runat="server" Height="50px" Width="500px" HeaderStyle-BackColor="#3AC0F2" HeaderStyle-ForeColor="White" RowStyle- BackColor="#A1DCF2" AlternatingRowStyle-BackColor="White" ForeColor="#3A3A3A"></asp:DetailsView> <br /> <div class="clear"> <div class="footer"> RowStyle- </body> </form> Desarrollo de aplicaciones con software propietario 30

</html> 33. Ingrese al archivo (Perfil.aspx.cs) de la nueva pagina y agregue el siguiente espacio de nombre Negocio.Views. 34. Ahora, en el PageLoad de la misma página, digite el siguiente código: protected void Page_Load(object sender, EventArgs e) if (Session["Nombre"]!= "") DetailsView1.DataSource = perfilneg.obtenerdatos(session["nombre"].tostring()); DetailsView1.DataBind(); 35. Dentro de la carpeta Views cree una nueva página llamada MisPost.aspx y digite el siguiente marcado: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="MisPost.aspx.cs" Inherits="MisPost" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head runat="server"> </head> <body> <title></title> <link href="~/styles/site.css" rel="stylesheet" type="text/css" /> <form runat="server"> <div class="page"> <div class="header"> <div class="title"> <h1> Desarrollo de aplicaciones con software propietario 31

</h1> FORO TRES CAPAS ASP.NET <div class="clear hideskiplink"> <asp:menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal"> <Items> <asp:menuitem Text="Inicio"></asp:MenuItem> NavigateUrl="~/Default.aspx" <asp:menuitem NavigateUrl="~/Views/Perfil.aspx" Text="Mi Perfil"/> <asp:menuitem NavigateUrl="~/Views/MisPost.aspx" Text="Mis Post"/> </Items> </asp:menu> <div class="main"> <h2> </h2> Mis Post <style type="text/css"> </style> <asp:repeater ID="Repeater1" runat="server"> <ItemTemplate> <div class="rounded_corners"> <h2 class="titulo"> <%# DataBinder.Eval(Container.DataItem,"idpost") %>. <%# DataBinder.Eval(Container.DataItem,"nombre") %> </h2> <p><%# DataBinder.Eval(Container.DataItem,"descripcion") %></p> <br /> </ItemTemplate> </asp:repeater> <br /> Desarrollo de aplicaciones con software propietario 32

<div class="clear"> <div class="footer"> </form> </body> </html> 36. Ingrese al archivo MisPost.aspx de la pagina anterior e incluya la referencia al espacio de nombres Negocio.Views. Despues, proceda a digitar el siguiente código en el Page_Load de esta página. protected void Page_Load(object sender, EventArgs e) if (Session["Nombre"]!= "") Repeater1.DataSource = mispostsneg.obtenermisposts(session["nombre"].tostring()); Repeater1.DataBind(); Parte 3: Pruebas de la aplicación 37. Retorne a la ventana de Microsoft SQL Server Manager Visual Studio. En el explorador de Objetos, ubique y expanda la base de datos Aplicación_Capas. Visualice los registros de la tabla Usuarios. 38. Retorne a la ventana del proyecto de Visual Studio y proceda a ejecutar la página Default.aspx. Ingrese con un usuario y contraseña de usuario ya registrado (seleccionado del paso anterior), selección ficha Mis Post. 39. Regrese a la ficha Home y presione boton Register. Agregue los datos de un nuevo usuario y presione al boton Registrar. Luego desde SQL, confirme que este usuario se agrego en la tabla Usuario. V. BIBLIOGRAFÍA 1. Thierry GROUSSARD. (2013). C# 5: Los fundamentos del lenguaje Desarrollar con Visual Studio 2012. Barcelona: ENI. Desarrollo de aplicaciones con software propietario 33