Programacion en Capas C#



Comments



Description

AntologíaUniversidad Tecnológica Costarricense Mike Zamora González Ingenieria de Sistemas Computacionales PROGRAMACION EN CAPAS CON C# Tomado de varios documentos publicados en la Internet Antologia Progamacion en Capas con C# Contenido No se encontraron elementos de tabla de contenido. Prof. Mike Zamora González Pág.:2 Antologia Progamacion en Capas con C# 1 Programación por capas. La programación por capas es un estilo de programación en el que el objetivo primordial es la separación de la lógica de negocios de la lógica de diseño. 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, sólo 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. Dicho de otra manera, la programación en capas no es más que separar las "responsabilidades" del software en distintos "responsables". Esta separación facilita la mantención del software y permite, por ejemplo, cambiar fácilmente a los responsables. Para que se entienda daré un ejemplo de la vida moderna. Cuando una persona se somete a una operación, pasa por las manos de a lo menos tres personas: un anestesiólogo, el cirujano y un instrumentista. El primero se encarga de aplicar la anestesia, el segundo de realizar la operación y el tercero de facilitar al cirujano los instrumentos que requiere para dicha operación. Si la operación es de cerebro o de corazón la especialidad del cirujano debería ser distinta y por tanto el cirujano será otro. La programación en capas consiste precisamente en esto, identificar y separar las responsabilidades en miembros especializados de modo que si se requiere cambiar a un responsable, sea fácil hacerlo. La estructura más común de este concepto es la programación en tres capas. En ésta los responsables son el encargado de los datos, el encargado del negocio y el encargado de la interacción con el usuario. Desde luego las responsabilidades varían dependiendo del sistema y por consecuencia los responsables también, sin embargo, las responsabilidades antes mencionadas son las más comunes en los sistemas de administración. Espero que hasta este punto se entienda el concepto, y si es así, es probable que algunos estén pensado algo como "¡Ok, suena bonito!, pero ¿cómo llevo esto a una Prof. Mike Zamora González Pág.:3 Antologia Progamacion en Capas con C# aplicación?", pronto lo veremos con unos ejemplos por ahora continuaremos con la teoria. 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. 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) Prof. Mike Zamora González Pág.:4 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. Está formada por uno o más gestores de bases de datos que realizan todo el almacenamiento de datos. Capa de presentación: la que ve el usuario (también se la denomina "capa de usuario"). Aquí no solo pueden ser gestores de bases de datos. para recibir las solicitudes y presentar los resultados. reciben solicitudes de almacenamiento o recuperación de información desde la capa de negocio. Capa de negocio: es donde residen los programas que se ejecutan. 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). Esta capa se comunica únicamente con la capa de negocio. se reciben las peticiones del usuario y se envían las respuestas tras el proceso. validaciones y procesos específicos de la informacion. 2.:5 . También se consideran aquí los programas de aplicación. presenta el sistema al usuario. También hay preprocesamiento de datos y algunos procesos específicos de la información. y si el crecimiento de las necesidades lo aconseja se pueden separar en dos o más servidores o computadores. si bien lo más usual es que haya una multitud de servidores o computadores en donde reside la capa de presentación (son los clientes de la arquitectura cliente/servidor). Capa de datos: es donde residen los datos y es la encargada de acceder a los mismos. Todas estas capas pueden residir en un único computador. Prof.1 Capas y niveles 1. para solicitar al gestor de base de datos almacenar o recuperar datos de él. Esta capa se comunica con la capa de presentación. y con la capa de datos. Las capas de negocio y de datos pueden residir en el mismo computador. 3. el alamacenamiento puede ser de cualquier tipo existente.Antologia Progamacion en Capas con C# 1. Mike Zamora González Pág. Se denomina capa de negocio (e incluso de lógica del negocio) porque es aquí donde se establecen todas las reglas que deben cumplirse (Reglas de Negocio). :6 .Antologia Progamacion en Capas con C# Así. lógica del negocio. Si. Por ejemplo:  Una solución de tres capas (presentación. (Conocida como capa de Base de Datos) En cambio. Se dice que la arquitectura de la solución es de tres capas y un nivel. En sistemas muy complejos se llega a tener una serie de servidores o computadores sobre los cuales corre la capa de negocio. lógica del negocio. el término "nivel" corresponde a la forma en que las capas lógicas se encuentran distribuidas de forma física.  Una solución de tres capas (presentación. (Conocida como capa Aplicativa)  Datos. por el contrario. Prof. los términos "capas" y "niveles" no significan lo mismo ni son similares. datos) que residen en un solo computador (Presentación+lógica+datos). Se dice que la arquitectura de la solución es de tres capas y dos niveles. fuese la complejidad en la capa de negocio lo que obligase a la separación. 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. si el tamaño o complejidad de la base de datos aumenta. Mike Zamora González Pág. y otra serie de servidores o computadores sobre los cuales corre la base de datos. esta capa de negocio podría residir en uno o más servidores o computadores que realizarían solicitudes a una única base de datos. En una arquitectura de tres niveles. datos) que residen en dos servidores o computadores (presentación+lógica por un lado. lógica+datos por el otro lado). se puede separar en varios servidores o computadores los cuales recibirán las peticiones del computador en que resida la capa de negocio.  El correo electrónico. es necesario tener en cuenta que hay un elemento que los tres responsables deben conocer. está claro que el encargado de datos debe saber que grabar y que Prof. Me refiero a la "persona" o mejor dicho a sus datos.Antologia Progamacion en Capas con C# 2 Programación en capas con un ejemplo en C# El ejemplo consistirá en algo tan simple como un mantenedor de datos de personas (nombre.  Un botón Cargar  Un botón Guardar 2. Mike Zamora González Pág.:7 .3 Interface (interacción con el usuario) Contendrá  Una grilla para mostrar y editar los datos.4 Ejemplo. 2. teléfono y correo electrónico) y nuestros responsables se encargarán de lo siguiente: 2.2 Negocio Entregará los datos al encargado de la interacción con el usuario y se encarga de las validaciones que serán dos:  El nombre no puede estar en blanco.1 Datos Leerá y grabara los datos en un archivo de texto. 2. Una vez definida las responsabilidades. si es ingresado. debe ser válido. Negocio y Dato requieren de Persona. un programador inexperto podría utilizar el método grabar de la clase Dato desde la Presentación.:8 . en nuestro caso. el encargado de negocios debe saber sobre que aplicar las reglas de negocio y el encargado de la interacción con el usuario debe saber que datos mostrar o pedir. Al momento de construir la aplicación. por ejemplo. me ha tocado ver aplicaciones en donde separan las responsabilidades en carpetas. es una buena práctica separar las responsabilidades en proyectos distintos de manera que quede claramente indicada la responsabilidad de cada proyecto. De todos modos aquí está el código: Prof. El siguiente diagrama ilustra lo anterior: Para quienes no sepan interpretar el diagrama. el único problema importante que veo en separar en carpetas es que podrían generarse conflictos de responsabilidad y desorden. no se validaría el nombre ni el correo electrónico. se lee así:  Presentación utiliza Negocio  Uno o más Negocios utilizan solo un Dato  Presentación. sin embargo.Antologia Progamacion en Capas con C# leer. lo que implicaría que se estaría saltando las reglas de negocios. Mike Zamora González Pág. :9 . /// </summary> private void InitializeComponent() { this.DataGridViewTextBoxColumn().1 Presentación: namespace EjemploTresCapas { partial class Presentacion { /// <summary> /// Variable del diseñador requerida.ComponentModel.4.ComponentModel. } base. No se puede modificar /// el contenido del método con el editor de código. Mike Zamora González Pág.Antologia Progamacion en Capas con C# 2. false en caso contrario.</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components. } #region Código generado por el Diseñador de Windows Forms /// <summary> /// Método necesario para admitir el Diseñador.IContainer components = null. this.components = new System.Windows.Forms. /// </summary> private System.dgPersona = new System. /// <summary> /// Limpiar los recursos que se estén utilizando.Windows.Dispose().Forms. /// </summary> /// <param name="disposing">true si los recursos administrados se deben eliminar.telefonoDataGridViewTextBoxColumn = new System. this. Prof.Container().Forms.DataGridView().Dispose(disposing).Windows. this.DataGridViewTextBoxColumn().nombreDataGridViewTextBoxColumn = new System. nombreDataGridViewTextBoxColumn.AnchorStyles.Button().AllowUserToOrderColumns = true.DataGridViewColumn[] { this.ColumnHeadersHeightSizeMode = System.Windows.Size = new System. this.Left) | System.Drawing.nombreDataGridViewTextBoxColumn.dgPersona. // // nombreDataGridViewTextBoxColumn // this.dgPersona.Forms. this.Anchor = ((System.dgPersona.Name = "dgPersona".Button(). 0).Windows.ISupportInitialize)(this.Windows.Top | System. 368).Windows.BindingSource(this.SuspendLayout().Windows.Forms.emailDataGridViewTextBoxColumn}).Right))).Forms. this.Forms.AnchorStyles)((((System.components). this. this.:10 . this.AnchorStyles.DataGridViewTextBoxColumn().BeginInit(). this. this.Bottom) | System.ISupportInitialize)(this. ((System.emailDataGridViewTextBoxColumn = new System.Forms. Mike Zamora González Pág.DataGridViewColumnHeadersHeightSizeMode.Forms.AnchorStyles.Windows.Point(0.dgPersona)). this.nombreDataGridViewTextBoxColumn. Prof.DataPropertyName = "Nombre". this.Size(737.DataSource = this.AutoGenerateColumns = false. this.Windows. ((System.personaBindingSource. this.Columns.Forms.Forms.BeginInit().Antologia Progamacion en Capas con C# this.TabIndex = 0.Drawing.ComponentModel.Forms. this.btnGrabar = new System.AnchorStyles.btnCargar = new System.HeaderText = "Nombre".personaBindingSource)).personaBindingSource = new System.Windows.ComponentModel.Location = new System.Forms.Name = "nombreDataGridViewTextBoxColumn".dgPersona.AutoSize. // // dgPersona // this.dgPersona.Windows.Forms.AddRange(new System.dgPersona.nombreDataGridViewTextBoxColumn.Windows.dgPersona.telefonoDataGridViewTextBoxColumn.dgPersona.dgPersona. this. this.dgPersona.Windows. this. this. Prof.btnCargar.Drawing. this.Name = "emailDataGridViewTextBoxColumn".btnCargar_Click).Forms.AnchorStyles)((System. // // personaBindingSource // this.telefonoDataGridViewTextBoxColumn.Anchor = ((System.HeaderText = "Email".Drawing. this.AnchorStyles.Location = new System. this.btnCargar.emailDataGridViewTextBoxColumn.AnchorStyles.telefonoDataGridViewTextBoxColumn.Size(75.Forms.emailDataGridViewTextBoxColumn.Bottom | System.emailDataGridViewTextBoxColumn.Windows.TabIndex = 1.Point(569.Forms.AnchorStyles. this.btnGrabar. this.btnCargar.DataSource = typeof(EjemploTresCapas.personaBindingSource.Name = "telefonoDataGridViewTextBoxColumn".Right))). Mike Zamora González Pág. this.btnCargar. this.Anchor = ((System. this.btnGrabar.Antologia Progamacion en Capas con C# // // telefonoDataGridViewTextBoxColumn // this. // // btnGrabar // this.Windows. // // btnCargar // this.Windows. 23).:11 .Persona).DataPropertyName = "Telefono".Forms.Forms.UseVisualStyleBackColor = true.Point(650.Right))). this. this.Click += new System.HeaderText = "Telefono". this.AnchorStyles.AnchorStyles)((System.Size = new System.Location = new System. 374).btnCargar.Entidad.btnCargar.Windows.Name = "btnCargar".DataPropertyName = "Email".btnCargar.Windows.Drawing. 374). this.telefonoDataGridViewTextBoxColumn. // // emailDataGridViewTextBoxColumn // this.Bottom | System.EventHandler(this.Forms.Text = "Cargar".btnCargar.Windows. Windows.dgPersona)). private System.Add(this.Forms. this.Windows.Windows.Name = "btnGrabar".EndInit().Windows.ComponentModel. // // Presentacion // this.AutoScaleMode. this. this.btnGrabar.UseVisualStyleBackColor = true.Drawing. this. ((System.Windows.Size(737. this.ResumeLayout(false).ISupportInitialize)(this.Forms.EventHandler(this.dgPersona). this.Add(this. private System. this.DataGridViewTextBoxColumn emailDataGridViewTextBoxColumn.btnCargar).AutoScaleMode = System.Forms.BindingSource personaBindingSource.Controls. private System.Click += new System. } } Prof.btnGrabar). private System.Forms. this.Forms. Mike Zamora González Pág.Forms.Windows. 404).Windows. this. this.DataGridViewTextBoxColumn nombreDataGridViewTextBoxColumn.btnGrabar.personaBindingSource)).Text = "Grabar". 23).Drawing.SizeF(6F.Button btnCargar.btnGrabar.Forms.DataGridViewTextBoxColumn telefonoDataGridViewTextBoxColumn.Font.ClientSize = new System.btnGrabar. 13F).ISupportInitialize)(this.Antologia Progamacion en Capas con C# this.Drawing.:12 .Size(75.Forms.btnGrabar.btnGrabar_Click).Controls. } #endregion private System.Text = "Form1".Add(this. private System.DataGridView dgPersona. ((System. private System.Button btnGrabar.Controls. this.Name = "Presentacion".AutoScaleDimensions = new System. this.EndInit().Windows.Size = new System. this.TabIndex = 2.ComponentModel.btnGrabar. using System.AppSettings["ArchivoDatos"]).Generic. personaBindingSource. public Presentacion() { InitializeComponent(). } private void btnCargar_Click(object sender.Negocio(ConfigurationManager. EventArgs e) { try { personaBindingSource.Show(error.Antologia Progamacion en Capas con C# using EjemploTresCapas.Configuration.DataSource != null && personaBindingSource.DataSource = new List<Persona>(). } } private void btnGrabar_Click(object sender. EventArgs e) { try { if (personaBindingSource. namespace EjemploTresCapas { public partial class Presentacion : Form { private Negocio.Entidad. using System.DataSource as List<Persona>).Forms.DataSource is List<Persona>) _negocio.DataSource = _negocio.Collections.Leer().Grabar(personaBindingSource.Negocio _negocio. } catch (Exception error) { MessageBox. Mike Zamora González Pág. } Prof. _negocio = new Negocio. using System.Windows. using System.:13 .Message). Show(error. Prof._dao.Negocio { public class Negocio { private bool _emailInvalido.4.").RegularExpressions.Text.Message).Globalization.Instancia(nombreArchivo). } public void Grabar(List<Persona> datos) { foreach (Persona item in datos) { if (string. private Datos _dao. using System.Entidad.Dato. using System.Leer(). } } } } 2.2 Negocio: using EjemploTresCapas.Nombre)) throw new Exception("El nombre de la persona no puede ser vacio.:14 . using EjemploTresCapas. namespace EjemploTresCapas.IsNullOrWhiteSpace(item. using System. Mike Zamora González Pág. public Negocio(string nombreArchivo) { this. using System._dao = Datos.Generic. } public List<Persona> Leer() { return this.Antologia Progamacion en Capas con C# catch (Exception error) { MessageBox.Collections. FromMilliseconds(200)). item. // Use IdnMapping class to convert Unicode domain names.)+[az0-9]{2. TimeSpan.3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.+)$". @"^(?("")(""[^""]+?""@)|(([0-9a-z]((\. Mike Zamora González Pág.17}))$".Replace(strIn. try { strIn = Regex.IsNullOrEmpty(strIn)) return false. if (String.Format("El correo electrónico {0} no es válido"._dao.IsNullOrEmpty(item.Email)) throw new Exception(string.:15 . } if (_emailInvalido) return false.Grabar(datos).))|[!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" + @"(?(\[)(\[(\d{1. RegexOptions. TimeSpan.3}\. @"(@)(.Email)).FromMilliseconds(250)). try { return Regex.None. RegexOptions. } this. } catch (RegexMatchTimeoutException) { return false. // Return true if strIn is in valid e-mail format.IsMatch(strIn.){3}\d{1. this. } catch (RegexMatchTimeoutException) { Prof. } public bool IsValidEmail(string strIn) { _emailInvalido = false.(?!\.IgnoreCase.DomainMapper.Antologia Progamacion en Capas con C# if (!string.Email) && !IsValidEmail(item. :16 .Collections.Dato { public class Datos { private static Datos datos. } } private string DomainMapper(Match match) { // IdnMapping class with default property values. } catch (ArgumentException) { _emailInvalido = true. public string NombreArchivo { get. using System. IdnMapping idn = new IdnMapping().GetAscii(domainName). using System. } } } 2.IO.Groups[2].Value + domainName. namespace EjemploTresCapas.3 Dato: using EjemploTresCapas. string domainName = match.4.Antologia Progamacion en Capas con C# return false.Generic.Groups[1]. Mike Zamora González Pág.Entidad. } return match. } public static Datos Instancia(string nombreArchivo) { if (datos == null) datos = new Datos(nombreArchivo).Value. private set. Prof. try { domainName = idn. } public List<Persona> Leer() { List<Persona> datos = new List<Persona>(). datos.ReadLine().Add(new Persona(arrDatos[0]. return datos.NombreArchivo = nombreArchivo.Split('. Mike Zamora González Pág. } } else throw new FileNotFoundException("No se encontró el archivo " + NombreArchivo).'). } sr. false)) Prof.Close(). } private Datos() { } private Datos(string nombreArchivo) { this. arrDatos[1]. if (File.:17 .Antologia Progamacion en Capas con C# return datos. arrDatos[2])). } public void Grabar(List<Persona> datos) { using (StreamWriter sr = new StreamWriter(NombreArchivo.EndOfStream) { string[] arrDatos = sr.Exists(NombreArchivo)) { using (StreamReader sr = new StreamReader(NombreArchivo)) { while (!sr. cambiar la capa de datos por una en la cual los datos sean guardados en una base de datos o en un archivo XML.string. } public Persona() : this (string. Prof.WriteLine(item.Telefono = telefono.4 Entidad: namespace EjemploTresCapas. Nombre.{2}".ToString()). Mike Zamora González Pág.Nombre = nombre.Close(). string telefono. } public override string ToString() { return string. this. } public string Telefono { get. set.Antologia Progamacion en Capas con C# { foreach (Persona item in datos) sr.Entidad { public class Persona { public string Nombre { get.Email = email. sr. set.Format("{0}. set. } public string Email { get. Telefono.Empty) { } public Persona(string nombre.Empty. Email).:18 . sr.Flush().4. this. } } } Les dejo como tarea. } } } } 2. string email) { this.{1}.Empty.string. en donde paso a paso se mostrara como crear un programa en C# utilizando tres capas. Visual Studio (en este ejemplo se usara 2008) 2.NET. La decisión de donde poner cada responsabilidad dependerá de la aplicación que se esté desarrollando. este ejemplo se ha realizado con lujo de detalles para que no existan dudas. etc.net En este ejemplo vamos a realizar una aplicacion usando el visual studio instalado con C#.Antologia Progamacion en Capas con C# Para terminar. realizan validaciones de forma. pero aun asi. 3. donde la tercera capa de presentacion se realizara en ASP. Mike Zamora González Pág.microsoft. formatean cuadros de texto. Los métodos de validación del correo electrónico se obtuvieron desde msdn. si las hay favor de comentarlas. me queda señalar que si bien en el ejemplo pusimos la validación del nombre obligatorio como parte de nuestro negocio.:19 . esto se debe a que es común en los lenguajes modernos tener controles inteligentes que. esta responsabilidad podría trasladarse a la presentación.com del artículo Cómo: Comprobar si las cadenas tienen un formato de correo electrónico válido 3 Otro Ejemplo de Programacion en tres capas con C# usando asp. SQL Server (se puede usar cualquier gestor teniendo en cuenta que la cadena de conexion cambiara. se recomienda usar SQL SERVER ya que el ejemplo que se muestra tiene la intencion de evitar errores pero si tienes experiencia en otro gestor se puede usar) Prof. por ejemplo.1 Los requerimientos Antes de comenzar necesitamos instalar 1. obligan a ingresar datos. El password con el que se identifica el usuario “Password” Todos estos datos a exepcion de el nombre de la base de datos (Initial Catalog) los encontramos cuando nos conectamos con sql server asi que la siguente imagen aclara los siguientes pasos de como construir la cadena de conexion.Antologia Progamacion en Capas con C# 3. si tienes algo de experiencia con sql server esto deberia ser algo sencillo para ti. y asi evitar errores. Pasa a la siguiente pagina… Prof. El nombre de nuestro servidor identificado como “Data Source” en la cadena de conexion 2.2 Empezemos con la cadena de conexion La cadena de conexion es una de las partes mas importantes de este programa puesto que es con lo que nuestra base de datos se comunicara con el programa. especificamente solamente con la capa de datos. Para realizar la cadena de conexion debemos saber 4 datos. 1. Despues de instalar SQL Server. despues de que se realize esta prueba satisfactoriamente. El nombre de el usuario “User” 4. El nombre de nuestra base de datos como “Initial Catalog” 3. se realiza una prueba de conexion donde podras ingresar tu login sa y tu password (el cual se ingreso al instalar SQL). desconectate. asi podemos asegurar que lo que vamos a colocar en la cadena de conexion sean parametros validos.:20 . Mike Zamora González Pág. con el boton conectarte con el boton y vuelve a . Password=????????" Nuestra ultima duda para la cadena de conexion es Initial Catalog la cual para efectos de este ejemplo le asignaremos Empleados entonces nuestra cadena quedaria de la siguiente manera @"Data Source=???????????.User ID=sa.Password=????????" Si cuentas con conocimientos de base de datos solo asigna cualsea el nombre de tu base de datos.Antologia Progamacion en Capas con C# Para crear la cadena solo debemos substituir los datos mostrados en la imagen anterior aqui dejo la cadena para que no exista confusion a la hora de transcibir @"Data Source=???????????. Mike Zamora González Pág.User ID=sa.:21 . Prof.Initial Catalog=Empleados.Initial Catalog=??????. intEdad: es de tipo entero de capacidad para guardar valores de hasta 127 el cual nos sirve para almacenar la edad del empleado. strNombre varchar(20). es de tipo entero y no acepta valores nulos.. 2. ya creada la base de datos necesitamos crear una tabla donde se puedan guardar nuestros datos que vamos a utilizar para esta nuestra aplicacion entonces escribimos el siguiente script y presionamos F5 create table Datos ( id int identity primary key not null. strApellido varchar(20).:22 . strNombre: es de tipo varchar con capacidad para 20 caracteres el cual nos sirve para almacenar el nombre del empleado. id: es la llave primaria. 3. 4. intEdad tinyint ) Este script crea la una tabla llamada Datos la cual tiene 4 campos: 1. y sirve para darle un identificar al empleado. strApellido: es de tipo varchar con capacidad para 20 caracteres el cual nos sirve para almacenar el apellido del empleado.Antologia Progamacion en Capas con C# 3.3 Crear la base de datos e insertar un registro Ahora nos conectamos en SQL Server y dando click en la opcion New Query escribimos create database Empleados y presionamos F5 nos deberia mandar el mensaje Command(s) completed successfully. con eso hemos creado la base de datos llamada Empleados ahora tenemos que decirle a SQL que esa es la base de datos que queremos usar entonces escribimos use Empleados y presionamos nuevamente F5 y nos vuelve a enviar el mensaje Command(s) completed successfully. Prof. Mike Zamora González Pág. En SQL escribimos el siguiente script para crear nuestro procedimiento y presionamos F5 create proc insDatos ( @nombre varchar(20).:23 . Prof.@edad) Este procedimiento realiza un insert y lo ejecutamos de la siguiente manera con su correspondiente F5 despues de escribirlo exec insDatos 'Juan'. @apellido varchar(20).23 solo necesitamos saber los el tipo de argumentos que toma y el nombre del procedimiento.'Perez'. @edad int ) as insert into Datos values(@nombre. con los datos que corresponden a la insercion realizada por nuestro procedimiento. crearemos un procedimiento almacenado para que nuestro programa pueda guardar los datos introducidos desde la capa de presentacion. Ahora solo nos falta verificar que el registro se haya incluido en nuestra base de datos eso lo realizamos con lo siguiente seguido de un F5 select * from Datos Con esto sql nos presentara en la ventana Results que se muestra en la imagen de bajo.Antologia Progamacion en Capas con C# Ahora ya con la tabla Datos vamos a hacerlo un poco mas interesante.@apellido. Mike Zamora González Pág. 23 GO select * from Datos GO Con esto finalizamos en nuestra base de datos es hora de programar en 3 capas 3. dentro de plantillas seleccionamos Plantillas instaladas de Visual Studio despues Biblioteca de Clases.4 Capa de datos Ya tenemos configurada nuestra base de datos lista para ser usada.@edad) GO exec insDatos 'Juan'. en la siguiente imagen se aclara los pasos antes descritos para la configuracion de nuestra solucion Prof. intEdad tinyint ) GO create proc insDatos ( @nombre varchar(20). un simple copy/paste realizara todo lo necesario create database Empleados GO use Empleados GO create table Datos ( id int identity primary key not null. strApellido varchar(20). Mike Zamora González Pág.Antologia Progamacion en Capas con C# Si lo deseas y tienes experiencia con scripts aqui pongo todo lo que se necesita para nuestro ejemplo. llamaremos a nuestro proyecto Datos y la solucion llamada TresCapas. @apellido varchar(20).'Perez'. strNombre varchar(20). @edad int ) as insert into Datos values(@nombre.@apellido.:24 . ahora abriremos Visual Studio y crearemos un nuevo proyecto en apartado tipo de proyecto seleccionamos Visual C# y despues seleccionamos Windows. por lo que la eliminaremos. todo el proceso se muestra en la siguiente imagen Prof.:25 .cs que nosotros no pedimos.Antologia Progamacion en Capas con C# Ahora en Visual Studio nos presenta una clase llamada Class1. haciendo click derecho sobre la clase en el explorador de soluciones y seleccionaremos eliminar. Mike Zamora González Pág. Ahora crearemos una clase llamada Configuracion en la cual pondremos nuesta cadena de conexion que anteriormente generamos para ello en el explorador de soluciones seleccionaremos el proyecto Datos y le haremos un click derecho para que nos muestre las opciones en ellas seleccionaremos agregar y por ultimo en el menu emergente seleccionaremos clase. a continuacion Visual Studio nos pedira una confirmacion a la cual aceptaremos. Mike Zamora González Pág. pero como hemos elegido agregar una clase. Visual Studio tiene todo seleccionado por nosotros lo unico que hay que hacer en este paso es escribir el nombre de nuestra clase la cual llamaremos Configuracion en el cuadro de texto y dar click en agregar.:26 .Antologia Progamacion en Capas con C# El paso anterior nos llevara a una pantalla donde se muestra todos los elementos que Visual Studio puede agregar a nuestro proyecto. a continuacion se muestra una imagen del proceso. Prof. :27 . Mike Zamora González Pág. para hacer nuestra clase de configuracion tenemos que hacer publica nuestra clase agregandole la palabra reservada public antes de class y acontinuacion creamos una cadena de caracteres que contendra la cadena de conexion antes creada. public static string CadenaConexion { get { return cadenaConexion.Antologia Progamacion en Capas con C# Ahora Visual Studio nos muestra la estructura basica de nuestro programa. public class Configuracion { static string cadenaConexion = @"Data Source=???.User ID=sa. el codigo siguiente muestra como deberia de quedar nuestra clase y abajo se muestra una imagen de la clase en Visual Studio.Password=???". y con esto ya establecido le crearemos un metodo a la clase Configuracion el cual se llamara CadenaConexion. y se encargara de proporcionar la cadena de conexion a cualquier proceso que la necesite.Initial Catalog=Empleados. } } } Prof. :28 . pero esta vez nuestra clase se llamara MetodosDatos. A continuacion agregaremos los siguientes tres métodos: CrearComando Este metodo nos servira para crear un comando sql estandard como un select el cual sera regresado por su metodo return Prof. using System. Las cuales se insertan antes del namespace estas referencias nos sirven para llamar metodos ya establecidos en C#. esta clase tendra la tarea de acceder a la base de datos para que los metodos puedan obtener la informacion de nuestra base de datos. pero ademas a esta clase le agregaremos dos referencias.Data. El siguiente paso es agregar otra clase de la misma manera que lo hicimos con Configuracion. Al igual que configuracion le agregaremos la propiedad de public.Antologia Progamacion en Capas con C# En el dado caso que se desee acceder con autentificacion de windows lo que se tiene que hacer es agregar Trusted_Connection=true o Integrated Security=SSPI a la linea de conexion en vez de el usuario y el password. Mike Zamora González Pág.Data. using System.SqlClient. } EjecutarComandoInsert Este metodo obtiene como parametro un comando sql que proviene de el metodo anterior CrearComandoProc. _comando = _conexion. este metodo ejecuta el procedimineto almacenado que se le ha asignado al comando.ConnectionString = _cadenaConexion. } CrearComandoProc Este metodo al igual que el anterior nos crea un comando sql.Antologia Progamacion en Capas con C# public static SqlCommand CrearComando() { string _cadenaConexion = Configuracion. SqlConnection _conexion = new SqlConnection().CreateCommand().ExecuteNonQuery(). } Prof.StoredProcedure. SqlConnection _conexion = new SqlConnection(_cadenaConexion). return _comando. public static int EjecutarComandoInsert(SqlCommand comando) { Try { comando. _conexion. _comando. return comando. _conexion).Open().CommandType = CommandType. En la siguiente clase que agregaremos veremos como se le asigna el procedimiento almacenado a este comando. SqlCommand _comando = new SqlCommand(). SqlCommand _comando = new SqlCommand("InsDatos". pero con la diferencia que este metodo nos creara nuestro comando de manera que pueda ejecutar nuestro procedimiento almacenado que establecimos anteriormente llamado InsDatos.Connection. return _comando. Mike Zamora González Pág. _comando.:29 .CommandType = CommandType.Text. public static SqlCommand CrearComandoProc() { string _cadenaConexion = Configuracion.CadenaConexion.CadenaConexion. SqlDataAdapter adaptador = new SqlDataAdapter(). try{ comando. Ahora crearemos la clase que generara los comandos que se pasaron como parametros en la clase anterior MetodosDatos. } } EjecutarComandoSelect Este metodo ejecutara un comando select el cual nos regresara un datatable con todos los registros que se encuentren en alguna tabla dada. Prof.Connection.Dispose().Close().Connection.Close().cs contendra. comando.Data. Al igual que creamos las clases Configuracion y MetodosDatos anteriores crearemos una clase llamada AccesoDatos y se le agregara la propiedad public y las referencias.:30 . } Estas serian todas las clases que MetodosDatos. } finally { comando.SqlClient.cs. Mike Zamora González Pág.SelectCommand = comando.Data.Open().Fill(_tabla).Antologia Progamacion en Capas con C# catch { throw. using System. public static DataTable EjecutarComandoSelect(SqlCommand comando) { DataTable _tabla = new DataTable(). } return _tabla. adaptador. adaptador.Connection. using System. toma como parametro el comando que contiene la sentencia sql select. } catch (Exception ex) { throw ex.Connection. } finally { comando. } Estas dos clases integran a AccesoDatos. _comando. _comando.EjecutarComandoSelect(_comando). _comando.:31 . Apellido).AddWithValue("@apellido". Apellido y Edad los cuales son los campos que tenemos asignados en nuestra base de datos.CrearComandoProc(). En esta clase utilizaremos dos metodos: Insert Esta clase obtiene un comando sql proveniente de la clase MetodosDatos de su metodo CrearComandoProc le agrega los parametros que se necesitan para completar el procedimiento almacenado y despues lo ejecuta con el metodo EjecutarComandoInsert que se encuentra en la clase MetodosDatos. public int Insert(string Nombre. public static DataTable ObtenerEmpleados() { SqlCommand _comando = MetodosDatos. _comando.cs.AddWithValue("@edad". Mike Zamora González Pág. columnas. Prof.EjecutarComandoInsert(_comando). Nombre).cs.CrearComando(). etc). de esta manera podemos ingresar informacion a nuestra base de datos tan solo con asignarle parametros a nuestro metodo Insert el cual tiene asignados 3 parametros Nombre.Antologia Progamacion en Capas con C# de la misma manera que se realizo en la clase MetodosDatos. return MetodosDatos.Parameters. int Edad) { SqlCommand _comando = MetodosDatos. registros. } ObtenerEmpleados Esta clase obtiene un comando del metodo CrearComando de la Clase Metodos Datos lo almacena en _comando y despues le agrega la sentencia a ejecutar y por medio de el metodo EjecutarComandoSelect la ejecuta y nos regresa un DataTable que es un objeto de datos que contiene la estructura de una tabla (filas.Parameters. return MetodosDatos. string Apellido.CommandText = "SELECT * FROM Datos".AddWithValue("@nombre". Edad).Parameters. Visual Studio nos presenta una ventana en la cual podemos elegir varios tipos de referencias. al igual que en Datos agregaremos una biblioteca de clases para ello en tipos de proyecto seleccionamos Windows y en plantillas seleccionamos Biblioteca de Clases. Ya con nuestra clase AccesoLogica.SqlClient.Data. la podemos usar en nuestra clase AccesoLogica para usarla debemos agregarla de igual manera que lo hicimos en las clases anteriormente creadas. en la parte superior de nuestra clase agregamos. despues le asignamos el nombre de nuestra segunda capa en esta caso le llamaremos Negocio y le daremos aceptar. en esta ventana seleccionaremos la pestaña de Proyectos y ahi nos aparece nuestra biblioteca de clases Datos la cual esta contenida en nuestra Solucion llamada TresCapas. using System.5 Capa de negocio Para crear nuestra capa de negocio empezaremos por crear un nuevo proyecto. para esto nos situaremos en el explorador de soluciones y le haremos un click derecho a nuestra solucion llamada Tres Capas la cual nos presentara un menu y elegiremos Agregar y en el menu emergente seleccionaremos Nuevo Proyeto. Prof.:32 .Antologia Progamacion en Capas con C# Con esto hemos terminado con nuestra capa de datos es hora de crear nuestra capa de negocio. 3. De igual manera que realizamos con la capa de Datos. la seleccionamos y aceptamos. Mike Zamora González Pág. Visual Studio nos presenta una clase Class1.cs que no pedimos por lo que la borraremos y crearemos una nueva llamada AccesoLogica esta sera la encargada de enviar y recibir informacion de las dos capas la de Datos y la de Presentacion. Ya con la referencia agregada.Data. Ahora Visual estudio nos presenta todos los tipos de proyectos que podemos agregar a nuestra solucion.cs necesitamos agregar la referencia de nuestra capa anterior por lo que en referencias del proyecto negocio le haremos un click derecho y seleccionaremos agregar referencia. using System. A continuacion se muestra la pantalla de agregar nuevo proyecto en el cual seleccionaremos en tipo de proyectos. para ello haremos click derecho en nuestra solucion llamada TresCapas seleccionaremos agregar y ejemploeriormente Nuevo Proyecto. 3.ObtenerEmpleados(). Apellido y Edad y los envia por medio de una instancia de AccesoDatos a su metodo Insert. el cual recordaremos que nos regresa un Datatable conteniendo el resultado de la sentencia select.NET.:33 . string Apellido. return acceso. de esta manera la capa de negocio se comunica con la capa de datos y obtiene informacion proveniente de la base de datos. ahora en Prof. } Con esto terminamos nuestra capa de Negocio y continuamos con nuestra ultima capa la capa de Presentacion.6 Capa de presentacion La ulima capa sera de presentacion y la realizaremos en ASP. public static DataTable ObtenerEmpleados() { return AccesoDatos. Edad). } El metodo Insert recibe los parametros Nombre. para esto debemos agregar un proyecto a nuestra solucion. Mike Zamora González Pág.Insert(Nombre. Visual C# y acontinuacion Web. Apellido. int Edad) { AccesoDatos acceso = new AccesoDatos(). public int Insert(string Nombre.Antologia Progamacion en Capas con C# Ahora agregaremos la propiedad de public a nuestra clase AccesoLogica. Con lo anterior en su lugar podemos empezar a crear nuestros metodos para nuestra clase que en este caso seran solo dos ObtenerEmpleados e Insert El metodo ObtenerEmpleados de esta clase AccesoLogica utiliza el metodo con el mismo nombre que se establecio en la capa de Datos que se encuentra en AccesoDatos. Antologia Progamacion en Capas con C# plantillas seleccionaremos Aplicacion Web ASP.org/1999/xhtml" > <head runat="server"> <title>Página sin título</title> </head> <body> <form id="form1" runat="server"> <div> </div> </form> </body> </html> Ahora apartir de esto empezaremos a agregar los elementos que necesitaremos para nuestra ultima capa. Para empezar cambiaremos el titulo de la pagina modificandole el title. En esta ventana Visual Studio nos muestra lo que contiene Default. Ahora Visual Studio nos presentara Default. Mike Zamora González Pág.aspx que es la estructura basica de una aplicacion web.w3.org/TR/xhtml1/DTD/xhtml1-transitional.NET y le asignaremos el nombre de Presentacion y aceptaremos. le pondremos Tres Capas como titulo como se muestra acontinuacion <title>Tres Capas</title> dentro de la etiqueta <div> agregaremos una etiqueta llamada lblMensaje la cual se encargara de darle informacion a nuestro usuario de lo que esta sucediendo con nuestro programa. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default. <div> <asp:Label ID="lblMensaje" runat="Server" ForeColor="red" EnableViewState="False"/> Prof.cs" Inherits="Presentacion.w3.:34 ._Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.aspx el cual es un formulario web que contiene etiquetas de tipo HTML y XML el cual nos sirve para presentar la informacion a nuestro usuario.0 Transitional//EN" "http://www.dtd"> <html xmlns="http://www.aspx. tendra el fondo azul y color de letra blanco. Mike Zamora González Pág."> <th colspan="3">Agregar Registros</th> </tr> Fila 2: Esta fila contendra tres columnas identificadas por la etiqueta <td> en la primera columna se mostrara el mensaje Nombre para hacer referencia a el parametro necesario para obtener el nombre. <tr> <td>Nombre:</td> <td> <asp:TextBox ID="txtNombre" runat="Server"></asp:TextBox> Prof. en la segunda columna.color:White. se colocara un textbox para que el usuario introduzca el nombre a guardar en la base de datos el cual tendra el nombre de txtNombre. <asp:Label ID="lblMensaje" runat="Server" ForeColor="red" EnableViewState="False"/> <table style="border:2px solid #cccccc. la ultima columna contiene un validador de nombre val1 que tendra la funcion de avisar al usuario que ha cometido un error al ingresar datos en txtNombre. Fila 1: A esta fila por ser el encabezado se le cambiara el estilo.Antologia Progamacion en Capas con C# </div> Despues de haber agregado nuestra etiqueta debajo de ella agregaremos una tabla la cual contendra 7 filas. y se expande a lo largo de toda la tabla ocupando las 3 columnas que contendra nuestra tabla. <tr style="background-color:#507CD1."> <tr></tr> <tr></tr> <tr></tr> <tr></tr> <tr></tr> <tr></tr> <tr></tr> </table> Se escribiran acontinuacion el contenido de cada fila de la tabla.:35 . en el encabezado contrendra el mensaje de Agregar Registros. <tr> <td> Apellido: </td> <td> <asp:TextBox ID="txtApellido" runat="Server"></asp:TextBox> </td> <td> <asp:RequiredFieldValidator ID="val2" runat="Server" Text="*" ControlToValidate="txtApellido" Display="dynamic"></asp:RequiredFieldValidator> </td> </tr> Fila 4: Esta fila en su columna 1 contiene el mensaje Edad.:36 . en la primera columna el mensaje nombre en la segunda un textbox el con el nombre de txtApellido el cual nos provee de el apellido a guardar en la base de datos y por ultimo en la columna 3 un validador de nombre val2 el cual se encarga de verificar que el usuario indroduzca valores correctos en txtApellido. en la segunda columna se encuentra un textbox de nombre txtEdad el cual es mas pequeño que los textbox anteriores por su propiedad columns.Antologia Progamacion en Capas con C# </td> <td> <asp:RequiredFieldValidator ID="val1" runat="Server" Text="*" ControlToValidate="txtNombre" Display="dynamic"></asp:RequiredFieldValidator> </td> </tr> Fila 3: Al igual que la fila anterior tiene 3 columnas. al ocurrir este error se le presenta al usurario un mensaje de error. en la ultima columna se encuentra un validador de nombre val3 este validador verifica que el usuario solo ingrese numeros en el textbox txtEdad. <td> <asp:TextBox ID="txtEdad" runat="Server" Columns="4"></asp:TextBox> </td> <td> Prof. Mike Zamora González Pág. <tr> <td/> </tr> Fila 7: En esta fila se encuentra el GridView que contendra los datos que previamente se habran ido agregando a nuestra base de datos. <td colspan="3" align=center> <asp:GridView ID="GridView" runat="server" AutoGenerateColumns="false"> <Columns> Prof.:37 . <tr> <td>&amp. los cuales tendran un evento OnClick llamados Agregar y gvMostrar respectivamente. Mike Zamora González Pág.nbsp.Antologia Progamacion en Capas con C# <asp:RequiredFieldValidator ID="val3" runat="Server" Text="*" ControlToValidate="txtEdad" Display="dynamic"></asp:RequiredFieldValidator> <asp:CompareValidator ID="Comp" runat="Server" Text="Solo Enteros" ControlToValidate="txtEdad" Operator="DataTypeCheck" Type="Integer"></asp:CompareValidator> </td> </tr> Fila 5: La fila cinco contendra dos botones uno nos servira para tomar la informacion recolectada de los textbox y enviarla a la base de datos.</td> <td> <asp:Button ID="btnEnviar" runat="server" Text="Enviar" OnClick="Agregar" /> </td> <td> <asp:Button ID="Load" runat="server" Text="Mostrar" OnClick="gvMostrar" /> </td> </tr> Fila 6:Esta fila solo servira para separar a los botones de la fila 5 con el gridview de la fila 7. En este GridView se tienen que identificar los nombres de los campos que se quieren mostrar en la propiedad BoundField DataField y en la propiedad de HeaderText tenemos el nombre de el campo a mostrar en nuestra aplicacion. el otro boton nos servira para recibir todos los registros contenidos en la base de datos. w3. Mike Zamora González Pág.Antologia Progamacion en Capas con C# <asp:BoundField DataField="id" HeaderText="Id" /> <asp:BoundField DataField="strNombre" HeaderText="Nombre" /> <asp:BoundField DataField="strApellido" HeaderText="Apellido" /> <asp:BoundField DataField="intEdad" HeaderText="Edad" /> </Columns> </asp:GridView> </td> Con lo anterior definido.dtd"> <html xmlns="http://www. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default. el codigo completo se presenta acontinuacion asi como la ilustracion de como debe quedar.w3.:38 .org/1999/xhtml" > <head runat="server"> <title>Tres Capas</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="lblMensaje" runat="Server" ForeColor="red" EnableViewState="False"/> <table style="border:2px solid #cccccc.org/TR/xhtml1/DTD/xhtml1-transitional.color:White."> <tr style="background-color:#507CD1.aspx. hemos completado la Interface de usuario._Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1."> <th colspan="3">Agregar Registros</th> </tr> <tr> <td> Nombre: </td> <td> <asp:TextBox ID="txtNombre" runat="Server"></asp:TextBox> </td> </tr> <tr> <td> Prof.cs" Inherits="Presentacion.0 Transitional//EN" "http://www. Antologia Progamacion en Capas con C# Apellido: </td> <td> <asp:TextBox ID="txtApellido" runat="Server"></asp:TextBox> </td> <td> <asp:RequiredFieldValidator ID="val2" runat="Server" Text="*" ControlToValidate="txtApellido" Display="dynamic"></asp:RequiredFieldValidator> </td> </tr> <tr> <td> Edad: </td> <td> <asp:TextBox ID="txtEdad" runat="Server" Columns="4"></asp:TextBox> </td> <td> <asp:RequiredFieldValidator ID="val3" runat="Server" Text="*" ControlToValidate="txtEdad" Display="dynamic"></asp:RequiredFieldValidator> <asp:CompareValidator ID="Comp" runat="Server" Text="Solo Enteros" ControlToValidate="txtEdad" Operator="DataTypeCheck" Type="Integer"></asp:CompareValidator> </td> </tr> <tr> <td>&amp. Mike Zamora González Pág.</td> <td> <asp:Button ID="btnEnviar" runat="server" Text="Enviar" OnClick="Agregar" /> </td> <td> <asp:Button ID="Load" runat="server" Text="Mostrar" OnClick="gvMostrar" /> </td> </tr> Prof.nbsp.:39 . Antologia Progamacion en Capas con C# <tr> <td/> </tr> <tr> <td colspan="3" align=center> <asp:GridView ID="GridView" runat="server" AutoGenerateColumns="false"> <Columns> <asp:BoundField DataField="id" HeaderText="Id" /> <asp:BoundField DataField="strNombre" HeaderText="Nombre" /> <asp:BoundField DataField="strApellido" HeaderText="Apellido" /> <asp:BoundField DataField="intEdad" HeaderText="Edad" /> </Columns> </asp:GridView> </td> </tr> </table> </div> </form> </body> </html> Para realizar la programacion de esta parte primero necesitamos agregar la referencia de nuestra capa de negocio. Mike Zamora González Pág. Ahora debemos concluir nuestro programa. al igual que lo hicimos en la capa anterior. para ello nos dirigimos a el explorador de soluciones seleccionamos nuestro proyecto presentacion dentro encontraremos el archivo Prof. seleccionamos la capa de Negocios y aceptamos.:40 . para esto solo basta con modificar el codigo detras de nuestra interface. Seleccionaremos la capa de presentacion y le daremos un click derecho en referencias despues elegiremos agregar referencia En esta ventana seleccionaremos la pestaña de Proyectos donde nos aparecera la capa de Negocios y la capa de Datos que ya hemos creado. EventArgs e) { if (!Page. verifica que los datos ingresados estén correctos de lo contrario se aborta y sale de la ejecución. y a continuacion se manda un mensaje por medio de la etiqueta lblMensaje en caso de que exista o no error en la inserción.Text). AccesoLogica negocio = new AccesoLogica(). esta clase sera la encargada de realizar todo el proceso de insertar un registro en la base de datos. Esta clase funciona de la siguiente manera.apellido. en caso de que no se encuentren errores.:41 . Mike Zamora González Pág. if (resultado > 0) Prof. el cual sera negativo en caso de que ocurra un error en la base de datos.IsValid) return. seleccionamos Default.Parse(txtEdad. int resultado = negocio. string apellido = txtApellido. protected void Agregar(object sender.aspx le hacemos un click derecho y seleccionarmos Ver Codigo el cual nos llevara a el codigo detras de nuestra pagina. a esta instancia se le da el nombre de negocio. se crea una instancia de la clase AccesoLogica que proviene de nuestra capa de Negocios. int edad = Int32.aspx el cual modificamos anteriormente pero solo la parte de diseño ahora modificaremos el codigo que realizara lo antes planteado. por ultimo se libera la memoria de la instancia negocio. using Negocio.Antologia Progamacion en Capas con C# Default. después se asignan todos los contenidos de los textbox en una variable los cuales ejemploeriormente nos sirven para pasar los parámetros requeridos para una inserción en nuestra capa de negocio por medio de su método insert el cual devuelve un resultado.edad). Antes de empezar a escribir nuestro codigo necesitamos agregar la referencia de nuestra capa de Negocio.Text. utilizando todo lo que hemos construido hasta ahora. para ello agregaremos la referencia.Text. string nombre = txtNombre. Enseguida agregaremos una clase llamada Agregar la cual es un evento del botón Enviar que se encuentra en la fila 5 de nuestra pagina.Insert(nombre. DataSource = AccesoLogica. al igual que la anterior se ejecutara al hacer click en el botón Mostrar.Text = "Nuevo Registro Agregado Satisfactoriamente. EventArgs e) { GridView. negocio = null. } Ahora si deseamos ver la información contenida en nuestra base de datos.Text = txtNombre. else lblMensaje. GridView. e). esta clase tendrá la tarea de llenar el GridView con los datos contenidos en la base de datos.".IsEjemploBack) gvMostrar(sender. en la cual nos referiremos al evento gvMostrar el cual hemos realizado anteriormente. esta clase se ejecuta justo antes de que la pagina se muestre.ObtenerEmpleados().Text = "Nombre: [<b>" + txtNombre. agrege otro".Text = txtApellido. al momento que ingresemos a nuestra pagina debemos agregar algo de codigo a nuestra clase Page_Load la cual C# nos ha proporcionado por defecto a la hora de crear un proyecto ASP. } Ahora agregaremos otra clase llamada gvMostrar la cual. por ello si colocamos algo en esta clase. txtEdad.:42 . protected void Page_Load(object sender. por ultimo se deshace de todos los datos contenidos en los textbox.Text + "</b>] ya existe. esto aparecera al momento de cargar la pagina. } Prof. el cual se le asigna como DataSource a nuestro GridView y después se le liga a el GridView con la función DataBind.Text = "". protected void gvMostrar(object sender. Mike Zamora González Pág.DataBind(). para ello obtiene sus datos de la clase proveniente AccesoLogica llamada ObtenerEmpleados. En esta clase solo agregamos una linea de codigo. y lo utilizaremos para mostrar la informacion contenida en nuestra base de datos. EventArgs e) { if(!Page.Antologia Progamacion en Capas con C# lblMensaje.
Copyright © 2024 DOKUMEN.SITE Inc.