UNIVERSIDAD NACIONAL DE INGENIERÍA RECINTO UNIVERSITARIO SIMÓN BOLIVAR FACULTAD DE ELECTROTECNIA Y COMPUTACION
Manual de Programación en Tres Capas Con Visual Studio C #
Integrantes:
Manuel Abraham Gutiérrez Rojas Jeanneth del Socorro Mota López Nelson Eddy Castro Chavarría Grupo: 4T1-CO --- 2011®
Docente: Giovanni Sáenz
Jueves 18 de agosto de 2011
Manual de Usuario Arquitectura de Tres Capas En este pequeño manual, se explicarán los pasos para crear un proyecto en tres capas, para tener un mejor control de la aplicación que se está desarrollando. A continuación una breve introducción al uso de cada una de las capas:
Capa Datos Aquí se incluyen únicamente los componentes de la conexión de datos: Conexión Conjunto de Datos (Dataset) DataAdapter
Capa Negocios En esta capa, se incluyen todos los métodos para manipular al proyecto, las conexiones a datos, aquí es donde se realiza el desarrollo del nucleo de la aplicación. Capa Interfaz Aquí simplemente se ubican los formularios de los que constará la aplicación, y desde esta capa solamente se invoca a los métodos de la capa de Negocios.
Explicamos el procedimiento paso a paso de cómo crear un proyecto en 3 capas con la plataforma visual studio 2008 en el lenguaje C# Abrir Visual Studio y crear un nuevo Proyecto
2
Manual de Usuario Arquitectura de Tres Capas Seleccionar el lenguaje en el cual vamos a desarrollar nuestra aplicación y luego colocar el nombre de nuestra solución por ultimo ingresar el nombre de nuestro primer proyecto, que será la capa de interfaz, este proyecto debe de ser del tipo Windows Form Application
Crear los formularios Necesarios para la aplicación Para efecto de ejemplo se creará una única pantalla donde se cargarán los datos en un dataGridView desde una base de datos, para lo cual se deben seguir los siguientes pasos:
Renombrar el Formulario por defecto (Form1) con el nombre de frmPrincipal, al igual que el archivo Form1.cs Añadir un componente de tipo dataGridView y renombrarlo con el nombre de dgvDatos
Ya con nuestro proyecto de interfaz creado, el siguiente paso será crear la capa de datos para lograr una conexión con la base de datos. Para esto se debe crear un nuevo proyecto en nuestra solución este tipo de proyecto será una biblioteca de clases ya que al momento de construir la solución este proyecto será exportado como un .dll
3
Manual de Usuario Arquitectura de Tres Capas Para añadir un nuevo proyecto a la solución hacer click derecho sobre el nombre de la solución, Agregar, Nuevo Proyecto
Posteriormente ingresar el nombre del proyecto (En nuestro caso datos, para hacerlo más representativo) y seleccionar el tipo de proyecto biblioteca de clases
Luego de crear nuestro proyecto datos, renombramos la clase que aparece por defecto (Class1.cs) con el nombre clsDato.cs 4
Manual de Usuario Arquitectura de Tres Capas Como se había mencionado anteriormente, en esta capa se ubica únicamente los objetos para manipular los datos, como lo son la conexión, los adaptadores y los dataset Esta clase mas detallada queda asi: Añadir directivas using para datos using System.Data.SqlClient; using System.Data; public class clsDato { #region Variables de Instancia private private private private private
string string string string string
_BD = "[Nombre_BD]"; _PWD; //Contraseña _User; //Nombre de Usuario _Servidor = "[Nombre_SERVER]"; _Error; //Mensaje de Error de la BD
#endregion
Estas variables son usadas para Instanciar la cadena de Conexión hacia el servidor de la BD #region Variables Publicas public System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter(); public System.Data.SqlClient.SqlConnection cnx = new System.Data.SqlClient.SqlConnection(); public System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(); public System.Data.DataSet ds = new DataSet(); #endregion
Las variables públicas creadas arriba son las que manipularan la conexión de los datos en las capas de Negocio e Interfaz A continuación el encapsulamiento de las variables de Instancia, para obtener o colocar el valor de dicha variable #region Propiedades ///
/// Nombre de la Base de Datos /// public string BD { get { return this._BD; }
5
Manual de Usuario Arquitectura de Tres Capas set { this._BD = value; } } ///
/// Nombre del Usuario que accede a la BD /// public string User { get { return this._User; } set { this._User = value; } } ///
/// Nombre del Servidor /// public String Servidor { get { return this._Servidor; } set { this._Servidor = value; } } ///
/// Contraseña del Usuario que accede a la BD /// public string PWD { get { return this._PWD; } set { this._PWD = value; } } ///
/// Mensaje de Error de la BD /// public String Error { get { return this._Error; } set {this._Error = value;} } #endregion 6
Manual de Usuario Arquitectura de Tres Capas A continuación la lista de metodos que manipularan la conexión a los datos, en nuestro caso solo hemos utilizado uno, que es para crear la conexión #region Metodos ///
/// Crea la conexión con la Base de Datos /// ///
true--> Autenticacion de SQL, false-->Autenticacion de Windows public void ConectarBD(Boolean bolAutenticacion) { this.cnx = new System.Data.SqlClient.SqlConnection(); if (bolAutenticacion == true) { this.cnx.ConnectionString = "Data Source=" + this.Servidor + ";Initial Catalog=" + this.BD + ";Persist Security Info=TRUE;User ID=" + this.User + ";Password=" + this.PWD; } else { this.cnx.ConnectionString = "Data Source=" + this.Servidor + ";Initial Catalog=" + this.BD + ";Integrated Security=True"; } } #endregion } //Fin de la clase clsDato
Ya que hemos concluido el diseño de la capa de Datos, procederemos a crear nuestra capa de Negocio, que contendrá el llamado a los procedimientos de la Base de Datos para ingreso y consulta de Datos De la misma manera se creará otro proyecto de tipo biblioteca de clases bajo el nombre de Negocio
7
Manual de Usuario Arquitectura de Tres Capas Y procedemos a renombrar la clase por defecto ahora bajo el nombre clsMetodos.cs. Cabe destacar que en esta capa existen dos formas de ubicar el código, la primera es colocar el código de todas las clases en clsMetodo luego de la declaración del NameSpace namespace Negocio { public class Clase1 { } public class Clase2 { } public class Clase3 { } }
La otra opcion es añadir clases al proyecto
No se sugiere ninguna, ya que ambas generan el mismo resultado, en nuestro caso utilizaremos la forma 1 y dividiremos las clases con regiones. Ahora que tenemos creados nuestros 3 proyectos o capas, se debe hacer el enlace entre los mismos para que un proyecto pueda tener referencias del otro.
8
Manual de Usuario Arquitectura de Tres Capas A nuestro proyecto de interfaz le añadiremos las referencias a los proyectos de Negocio y Datos, para esto seguir los siguientes pasos:
Click derecho al proyecto Interfaz y luego seleccionar la opción Añadir referencia
Seleccionar la pestaña de Proyectos y elegir ambos proyectos
9
Manual de Usuario Arquitectura de Tres Capas Para la capa de Negocio, se debe realizar el mismo procedimiento, pero solo se seleccionara la capa de Datos que es a la única que consultaran los métodos que se creen en este proyecto
Si el Visual Studio no ha colocado al proyecto Interfaz como el proyecto principal (En letra negrita) se puede señalar haciendo click derecho sobre el proyecto y seleccionar la opción “Establecer como proyecto Principal”
10
Manual de Usuario Arquitectura de Tres Capas Ahora que ya contamos con nuestros 3 proyectos y ya se han creado las referencias, procedemos al desarrollo del código para el proyecto de Interfaz Nuestro proyecto de Ejemplo constará de un solo método en la capa de Negocio en una clase llamada Proveedores. Este método ejecutará un SELECT de una vista almacenada en la base de datos el la clase será de la siguiente manera: Primero las directivas using adicionales, ya que trabajaremos con la base de datos using System.Data; using System.Data.SqlClient; y agregar el using a las referencias using Datos;
El constructor de la clase recibe un parámetro de tipo clsDato, dado que en esta clase los objetos para la conexión ya están instanciados #region Proveedores ///
/// Clase para manipular /// los datos de los Proveedores /// public class Proveedores { clsDato dato; //Objeto de tipo clsDato ///
/// Constructor de la clase /// ///
Objeto de tipo clsDatos instanciado public Proveedores(clsDato d) { this.dato = d; }
Ahora procederemos a la creacion de un metodo que retorna un dataTable con la informacion de los Proveedores *El nombre de la vista se puede cambiar por uno existente en su Base de Datos ///
/// Obtiene los Datos de los Proveedores /// ///
dataTable con la información public DataTable getProveedores() { DataTable dt = new DataTable(); String query = "SELECT * FROM VW_Proveedores";
11
Manual de Usuario Arquitectura de Tres Capas
//Abrir la conexion con la BD this.dato.cnx.Open(); //Limpiar el dataSet this.dato.ds.Tables.Clear(); //Llenar las tablas con la consulta this.dato.da = new SqlDataAdapter(query, this.dato.cnx); this.dato.da.Fill(this.dato.ds, "Proveedores"); //Cerrar la conexion this.dato.cnx.Close(); //retornar la tabla return this.dato.ds.Tables["Proveedores"];
} }//Fin de la Clase Proveedores #endregion
Ahora en Nuestra capa de Inerfaz en el formulario frmPrincipal, especificamente en el metodo load, procederemos a cargar los datos de la vista que se invocan desde la capa de Negocio Para esto se añaden las directivas using de los 2 proyectos adicionales using Datos; using Negocio;
La clase frmPrincipal quedará de la siguiente manera con el llamado al método de la capa de Negocio en el Load del Formulario public partial class frmPrincipal : Form { clsDato dato = new clsDato(); //Objeto de Tipo clsDato Instanciado public frmPrincipal() { InitializeComponent(); } private void frmPrincipal_Load(object sender, EventArgs e) { try { //Crear la conexion para la autenticacion de Windows this.dato.ConectarBD(false); //Crear objeto de tipo Proveedores Proveedores prov = new Proveedores(this.dato); //Cargar la tabla con los Proveedores dgvDatos.DataSource = prov.getProveedores(); } 12
Manual de Usuario Arquitectura de Tres Capas
catch (Exception ex) { MessageBox.Show(ex.Message.ToString(),"Error", MessageBoxButtons.OK,MessageBoxIcon.Error); } } }
Ya que el metodo getProveedores retorna un dataTable, se asigna directamente la fuente de datos del dataGridView, y la linea this.dato.ConectarBD(false); o this.dato.ConectarBD(true);
Debe ir siempre que se invoque a un metodo que implique conexión, ya que esta linea instancia la cadena de conexion Ahora si ejecutamos el programa (F5) los resultados serán similares a los siguientes
En este manual, se ha mostrado como capturar los datos desde la BD, pero de la misma manera se puede hacer cualquiera de las operaciones soportadas por el gestor de BD como ejemplos: String sqlIns = "INSERT INTO TABLE(V1) VALUES '"+ var +"' ";
Solamente se manda a ejecutar como un comando sql en el metodo encargado de la accion. De la misma manera si se desea hacer fuentes de datos directas con la BD (con asistente), se deben crear los componentes en la capa de Negocio, y hacer referencia con el objeto clsdato 13