Você está na página 1de 53

Programacin en 3 Capas

usando Visual .Net


C Sharp

Instructora : Elcy Liliana Zapata


Centro de Tecnologas Agroindustriales.
Aplicacin para insertar, retirar o
modificar datos de una BD.
La programacin va a constar de 3 capas, una
que es la capa de datos, otra que es la capa
lgica y la ltima que es la capa de presentacin.

Para iniciar con la programacin vamos a crear


la base de datos en Mysql.
Manos a la Obra
Estructura de Datos
1. Crear Base de Datos
Crear tablas y relaciones
2. Crear la solucin y sus proyectos (Capas)
relacionados
Crear capa lgica CL (Agregar referencia a libreras
System.Windows.Form)
Crear capa de usuario CU. Establecer como proyecto de
inicio
Adicionar referencia al proyecto de la CL.
Manos a la Obra.
3. Crear la Capa de Datos
Clase conexin Crear la clase IEM
Definir la cadena de Atributos
conexin para MySql Codigo
Crear mtodos Descripcin
Tabla
Mtodos
Alta
Baja
Modificar
Listar
Manos a la obra
4. Formulario
Agregar botones
Botn agregar
Botn eliminar
Botn modificar
Agregar caja de texto
Agregar lista desplegable
Agregar grilla de datos
Crear mtodo cargar grilla
1. Crear Base de Datos
Crear en MySql con las siguientes tablas
Crear Base de Datos (continuacin)
Se debe verificar si
MySql cuenta con el
conector necesario
para integrarse con
Visual Studio, para
esto ingresamos a
MySql Installer
Crear Base de Datos (continuacin)
2. Crear solucin y sus proyectos
Creamos una solucin como de visual studio
Crear solucin y sus proyectos
(continuacin)

Una vez creada la solucin se agregan los


proyectos.

Para crear la capa lgica, se escoge como tipo


de proyecto Biblioteca de clases. Esta es una
librera dll que va a contener las clases con la
funcionalidad del aplicativo.
Crear solucin y sus proyectos
(continuacin)
Capa lgica
Crear solucin y sus proyectos
(continuacin)
Visual Studio muestra la capa y propone una
clase. Se elimina la clase que se crea por defecto
para crear las clases propias
Crear solucin y sus proyectos
(continuacin)
Se crea el proyecto para la capa de usuario o de
presentacin. Para esto se agrega un nuevo
proyecto del tipo aplicacin windows form.
Crear solucin y sus proyectos
(continuacin)
Visual Studio crea un proyecto con un
formulario. Se cierra para continuar con la
creacin del otro proyecto.
Crear solucin y sus proyectos
(continuacin)
En el explorador de
soluciones podemos
observar ya los dos
proyectos creados cada
uno representando cada
capa de la arquitectura de
software.
Crear solucin y sus proyectos
(continuacin)

Se debe dejar la capa de presentacin como


proyecto de inicio, ahora la capa lgica es el
proyecto de inicio y se identifica porque est en
negrita. Para cambiar el proyecto de inicio se
debe hacer clic sobre la capa de presentacin
con el botn derecho del mouse y se establece
ste como proyecto de inicio.
Crear solucin y sus proyectos
(continuacin)
Crear solucin y sus proyectos
(continuacin)
Para que la capa de
presentacin tenga
acceso a la capa lgica
se deben referenciar los
proyectos, para esto se
ubica el cursor en
referencias de la capa
de presentacin y con el
clic derecho se
selecciona la opcin
agregar referencias
Crear solucin y sus proyectos
(continuacin)
Se selecciona de la ventana de dilogo la opcin
proyectos y se marca el proyecto que se desea
referenciar, en este caso la capa lgica.
Crear solucin y sus proyectos
(continuacin)
Se agreg dentro de
las referencias de la
capa de usuario la
capa lgica.
Crear solucin y sus proyectos
(continuacin)
Ahora en la capa lgica se debe agregar la
referencia System.Windows. Form para poder
usar cuadros de mensajes, (MessageBox).
Crear solucin y sus proyectos
(continuacin)
En la categora Assembles y dentro de
Framework se selecciona la referencia
System.Widnows.Form
Crear solucin y sus proyectos
(continuacin)
Referencia agregada dentro de la capa de lgica
Crear solucin y sus proyectos
(continuacin)
Se crea un nuevo proyecto de tipo librera de
clases para la Capa de Datos. No olvide
eliminar la clase por defecto creada.
Crear solucin y sus proyectos
(continuacin)
Se puede observar que en el explorador de
soluciones quedan las tres capas creadas. Igual
como se hizo con la capa lgica, la capa de
datos debe ser referenciada en las otras dos
capas.
Crear solucin y sus proyectos
(continuacin)
En el explorador de
soluciones se pueden
observar las referencias.
3. Crear la Capa de Datos Clase
Conexin
En la capa de datos se debe adicionar la
referencia mysql.data
3. Crear la Capa de Datos Clase
Conexin
En la capa de datos se crea la clase conectar.
Crear la Capa de Datos Clase
Conexin (continuar)
Se crea con el nombre conectar
Crear la Capa de Datos Clase
Conexin (continuar)
Para que la clase sea pblica hay que asignarle el
acceso. Esto con el fin de que se pueda invocar
desde cualquier parte del a aplicacin.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Capa_Datos
{
public class conectar
{
}
}
Crear la Capa de Datos Clase
Conexin (continuar)
En el espacio de libreras se debe importar la
librera mysqlclient para tener acceso a los
mtodos de esta clase propia de Visual. Y
tambin se debe importar la librera para poder
usar cajas de mensaje.
using MySql.Data.MySqlClient;
using System.Windows.Form;

Recuerde que si una librera no es tomada es


porque falta adicionarla como referencia.
Crear la Capa de Datos Clase
Conexin (continuar)
using System;
using System.Collections.Generic; public MySqlConnection abrir()
using System.Linq; {
using System.Text; try
{
using System.Threading.Tasks;
//cadena de conexion para mysql
using MySql.Data.MySqlClient; this.con.Open();
using System.Windows.Forms;
namespace Capa_Datos MessageBox.Show("La conexion se ha realizado con
exito");
{
public class conectar
}
{ catch
MySqlConnection con = new {
MySqlConnection(); MessageBox.Show("Ocurri un error al
public conectar() intentar conectarse");
{ //cadena de conexion para mysql }
return con;
con.ConnectionString =
}
"Server=localhost;Database=aim_datos;Uid=ro
ot;Pwd=Mayo2009;";
}
}
}
Crear la Capa de Datos Clase
Conexin (continuar)
Probando que la conexin funciona.
En la capa de presentacin dentro de Form1
se va a insertar un botn que llame a la clase
conexin y muestre el mensaje esperado.
namespace Capa_Presentacion
{
public partial class Form1 : Form
{
conectar conexion = new conectar();

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)


{
conexion.abrir();
}

private void button2_Click(object sender, EventArgs e)


{
conexion.cerrar_Conexion();
}
}
}
Crear la Capa de Datos Clase
Conexin (continuar)
using System;
using System.Collections.Generic; MessageBox.Show("La conexion se ha realizado con exito");
using System.Linq;
}
using System.Text;
catch
using System.Threading.Tasks; {
using MySql.Data.MySqlClient; MessageBox.Show("Ocurri un error al intentar conectarse");
using System.Windows.Forms;
}
return con;
namespace Capa_Datos }
{
public class conectar public void cerrar_Conexion()
{
{
try
MySqlConnection con = new MySqlConnection(); {
public conectar() con.Close();
MessageBox.Show("La conexin se cerr con exito");
{ //cadena de conexion para mysql
}
con.ConnectionString = catch
"Server=localhost;Database=aim_datos;Uid=root;Pwd=Mayo2009;";
{
} MessageBox.Show("Ocurri un error al cerrar la conexin");
public MySqlConnection abrir() }
}
{
}
try }
{
//cadena de conexion para mysql
this.con.Open();
Crear la Capa de Datos Crear la clase
IEM
La clase IEM tendr los mtodos que permitirn insertar, eliminar,
modificar y listar datos dentro de las tablas de la base de datos.
Dentro de la capa lgica se adicionar una nueva clase llamada IEM.
No olvidar cambiar la visibilidad a la clase y dejarla public
Crear la Capa de Datos Crear la clase
IEM
La clase IEM es una clase general que permitir manipular datos de
diferentes tablas con la misma cantidad de atributos.
Primero se debe agregar a las referencias de la capa lgica la librera
Mysql.Data
Crear la Capa de Datos Crear la clase
IEM
Importar las librerias en la clase IEM
using MySql.Data;
using MySql.Data.MySqlClient;

Se crearn los mtodos para insertar, eliminar, modificar y listar


informacin de una tabla usando atributos que corresponden a los
campos de la tabla y un atributo adicional donde se define la tabla a
modificar.

El cdigo se presenta a continuacin:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Capa_Datos;
using MySql.Data;
using MySql.Data.MySqlClient;
using System.Windows.Forms;

namespace Capa_logica
{
public class iem
{
// definicin de atributos
public int codigo { get; set; } //autoimplementables
public string descripcion { get; set; }
public string tabla { get; set; } // para gestionar la tabla que se quiere implementar
//Creacin de mtodos creando un bloque
#region Mtodos

public bool Insertar (iem dato)


{
MySqlConnection conexion;

try {
conectar con = new conectar();
conexion = con.abrir();
string query ="INSERT INTO " + dato.tabla + " ( Descripcion ) VALUES('"+
dato.descripcion+"')";
MySqlCommand cmd = new MySqlCommand(query,conexion);
cmd.ExecuteNonQuery();
con.cerrar_Conexion();
return true;
}
catch (Exception ex)
{
MessageBox.Show(String.Concat(ex.Message, ex.StackTrace), "");
return false;
}
}
public bool Eliminar(iem dato)
{
MySqlConnection conexion;

try
{
conectar con = new conectar();
conexion = con.abrir();
string query = "DELETE FROM " + dato.tabla + " WHERE Codigo = " +
dato.codigo;
MySqlCommand cmd = new MySqlCommand(query, conexion);
cmd.ExecuteNonQuery();
con.cerrar_Conexion();
return true;
}
catch (Exception ex)
{
MessageBox.Show(String.Concat(ex.Message, ex.StackTrace), "");
return false;
}
}
public bool Modificar(iem dato)
{
MySqlConnection conexion;
try
{
conectar con = new conectar();
conexion = con.abrir();
string query = "UPDATE " + dato.tabla + " SET Descripcion = '" +
dato.descripcion + "' WHERE Codigo = " + dato.codigo;
MySqlCommand cmd = new MySqlCommand(query, conexion);
cmd.ExecuteNonQuery();
con.cerrar_Conexion();
return true;
}
catch (Exception ex)
{
MessageBox.Show(String.Concat(ex.Message, ex.StackTrace), "");
return false;
}
}
public List<iem> Listar(iem dato)
{
MySqlConnection conexion;
var lista = new List<iem> { };
try
{
conectar con = new conectar();
conexion = con.abrir();
string query ="SELECT * FROM " + dato.tabla + " WHERE Descripcion like '%" +
dato.descripcion + "%' order by Descripcion";
MySqlCommand cmd = new MySqlCommand(query, conexion);
var rdr = cmd.ExecuteReader();
while (rdr != null && rdr.Read())
{
var registro = new iem();
registro.codigo = (int) rdr["Codigo"];
registro.descripcion = (string) rdr["Descripcion"];
lista.Add(registro);
}
con.cerrar_Conexion();}
catch (Exception ex)
{
MessageBox.Show(String.Concat(ex.Message, ex.StackTrace), "");
lista=null;
}
return lista;
}
#endregion
}
}
4. Formulario
Ya contando con la conexin y la lgica de la programacin, se
crear el formulario.
Se adiciona un nuevo formulario a la capa de presentacin que se
llamar principal.cs
4. Formulario
Se adicionan los controles necesarios al formulario
4. Formulario
Propiedades de cada uno de los componentes del formulario.
Botn Insertar:
Name: BInsertar
Text Insertar
Botn Eliminar:
Name: BEliminar
Text Eliminar
Botn Modificar
Name: BModificar
Text Modificar
Label
Text: Buscar
4. Formulario
Propiedades de cada uno de los componentes del formulario.
TextBox
Name: TxtBuscar

ComboBox
Name: CBTabla
Items:
perfil
tipo_telefono
tipo_email
DropDownStyle: DropDownList (Especifica que la lista se
muestra haciendo clic en la flecha abajo y que la parte del texto
no es modificable)
4. Formulario
Propiedades de cada uno de los componentes del formulario.
Grilla
Insertar columnas
Name: Codigo
Header Text: Codigo
Invisible
Name: Descripcion
Heder Text: Descripcion
Visible
Width: 300
4. Formulario
A continuacin se presenta la funcionalidad de la capa de usuario.

namespace Capa_Presentacion
using System;
{
using System.Collections.Generic;
public partial class Princiapal : Form
using System.ComponentModel;
{
using System.Data;
private readonly iem _iem;
using System.Drawing;
using System.Linq;
public Princiapal()
using System.Text;
{
using System.Threading.Tasks;
_iem = new iem();
using System.Windows.Forms;
InitializeComponent();
using Capa_logica;
CBTabla.SelectedItem = 0;
CBTabla.Text = "perfil";
}
4. Formulario
A continuacin se presenta la funcionalidad de la capa de usuario.

private void Princiapal_Load(object sender, EventArgs e)


{
_iem.tabla = CBTabla.SelectedItem.ToString();
_iem.descripcion = "";
cargarGrilla(_iem);
}
public void cargarGrilla(iem _iem)
{
//Limpiar grilla antes de cargarla
dataGridView1.Rows.Clear();
var lista = _iem.Listar(_iem);
foreach (var registro in lista)
{
dataGridView1.Rows.Add(registro.codigo, registro.descripcion);
}
}
4. Formulario
A continuacin se presenta la funcionalidad de la capa de usuario.

private void BInsertar_Click(object sender, EventArgs e)


{
_iem.tabla = CBTabla.SelectedItem.ToString();
//para insertar un registro se debe solicitar la descripcin
if (dataGridView1.CurrentRow != null)
{
_iem.descripcion = (string)dataGridView1.CurrentRow.Cells[1].Value;
_iem.Insertar(_iem);
}
_iem.descripcion = "";
cargarGrilla(_iem);
}
4. Formulario
private void CBTabla_SelectedIndexChanged(object sender, EventArgs e)
{
_iem.tabla = CBTabla.SelectedItem.ToString();
_iem.descripcion = "";
cargarGrilla(_iem);
}

private void BEliminar_Click(object sender, EventArgs e)


{
_iem.tabla = CBTabla.SelectedItem.ToString();
//para eliminar un registro se debe solicitar la descripcin
if (dataGridView1.CurrentRow != null)
{
_iem.codigo = (int)dataGridView1.CurrentRow.Cells[0].Value;
_iem.Eliminar(_iem);
}
_iem.descripcion = "";
cargarGrilla(_iem);
}
4. Formulario
private void BModificar_Click(object sender, EventArgs e)
{
_iem.tabla = CBTabla.SelectedItem.ToString();
//para modificar un registro se debe solicitar la descripcin
if (dataGridView1.CurrentRow != null)
{
_iem.codigo = (int)dataGridView1.CurrentRow.Cells[0].Value;
_iem.descripcion = (string)dataGridView1.CurrentRow.Cells[1].Value;
_iem.Modificar(_iem);
}
_iem.descripcion = "";
cargarGrilla(_iem);
}

private void TxtBuscar_TextChanged(object sender, EventArgs e)


{
_iem.tabla = CBTabla.SelectedItem.ToString();
_iem.descripcion = TxtBuscar.Text;
cargarGrilla(_iem);
}
}
}
Referencias
Ejemplo prctico para realizar ABM en capas c-sharp
visual studio . Net -
https://www.youtube.com/watch?v=_7_0KCZSOZI
Function Insertar en base de datos MYSQL con
visual.net Parte2(Instalar appserv-MYSQL-
Conector.Net) -
https://www.youtube.com/watch?v=ARyW2JMEook
Connect C# to MySQL -
http://www.codeproject.com/Articles/43438/Connect-
C-to-MySQL
ComboBoxStyle (Enumeracin) -
https://msdn.microsoft.com/es-
es/library/system.windows.forms.comboboxstyle(v=vs.1
10).aspx

Você também pode gostar