Sei sulla pagina 1di 9

1

Clase Práctica Programación orientada a objetos


Objetivo General: Consolidar conocimientos adquiridos en el tema de programación a objetos con
modelo de tres capas.

Objetivos específicos: Que el estudiante desarrolle habilidades practicas mediante la


familiarización de escritura de código en ambiente de arquitectura de tres capas.

Consolidar la practica de la arquitectura de tres capas usando bases de datos sql server, capa de
datos, capa de negocios y capa de presentación.

Introducción: en esta oportunidad realizaremos las 4 operaciones CRUD (Create, Read, Update,
Delete) en una base de datos SQL Server, desde una aplicación de Windows Form en C#, con
procedimientos almacenados, programación orientada a objetos y arquitectura tradicional en capas.

Los pasos a seguir son los siguientes:


1. Crear base de datos y procedimientos almacenados para usarlos en el CRUD: Crearemos una
base de datos de nombre Práctica, una tabla Productos y unos cuantos registros, para
poder realizar las operaciones CRUD, para ello, también crearemos procedimientos
almacenados (Opcional).

CREACION DE BASE DE DATOS


create database Practica
go
use Practica

create table Productos


(
Id int identity (1,1) primary key,
Nombre nvarchar (100),
Descripcion nvarchar (100),
Marca nvarchar (100),
Precio float,
Stock int
)

INSERCION DE PRODUCTOS
insert into Productos
values
('Gaseosa','3 litros','marcacola',7.5,24),
('Chocolate','Tableta 100 gramos','iberica',12.5,36),
('Chocolate','Frasco 500 gramos','Nutella',250,10),
('Mermelada','Guayaba 150 gramos','Callejas',42.5,8),
('Leche','Litro de leche entera','Centrolac',31.5,25)

OPP Arturo J. Rodriguez Nov. 27, 19


2

CREACION DE PROCEDIMIENTOS ALMACENADOS

---PROCEDIMIENTOS ALMACENADOS
-----------------MOSTRAR
create proc MostrarProductos
as
select *from Productos
go

-----------------INSERTAR
create proc InsetarProductos
@nombre nvarchar (100),
@descrip nvarchar (100),
@marca nvarchar (100),
@precio float,
@stock int
as
insert into Productos values (@nombre,@descrip,@marca,@precio,@stock)
go

-----------------ELIMINAR
create proc EliminarProducto
@idpro int
as
delete from Productos where Id=@idpro
go
------------------EDITAR

create proc EditarProductos


@nombre nvarchar (100),
@descrip nvarchar (100),
@marca nvarchar (100),
@precio float,
@stock int,
@id int
as
update Productos set Nombre=@nombre, Descripcion=@descrip, Marca=@marca, Precio=@precio,
Stock=@stock where Id=@id
go

2. Crear una solución o Proyecto en Visual Studio.


Puede ser un proyecto en blanco o un
proyecto al que se le agregarán mas proyectos. En este caso crearemos un proyecto
de Windows forms con C#

OPP Arturo J. Rodriguez Nov. 27, 19


3

3. Agregar las capas como librería de clases


Los nombraremos como CapaDatos (para los accesos a sql server) y CapaNegocios (para los
accesos de la capa presentación y como puente entre esta y la capa de datos)

4. Capa de Acceso a Datos (CapaDatos)


Primero debemos renombrar la clase o borrar esa clase (Class.cs) y crear una nueva con el
nombre CD_Conexion.cs). Debemos usar System.Data y System.SqlClient

Creamos la cadena de conexión, un método para abrir la conexión y otro método para cerrar
la conexión.

using System;
using System.Data;
using System.Data.SqlClient;
using System.Linq;

namespace CapaDatos
{
public class CD_Conexion
{
private SqlConnection Conexion = new
SqlConnection("Server=.;DataBase=Practica;Integrated Security=true");

private SqlConnection AbrirConexion()


{
if(Conexion.State == ConnectionState.Closed)
Conexion.Open();
return Conexion;

OPP Arturo J. Rodriguez Nov. 27, 19


4

public SqlConnection CerrarConexion()


{
if(Conexion.State == ConnectionState.Open)
Conexion.Close();
return Conexion;
}
}
}

5. Agregamos otra clase para el objeto de acceso a datos de


Productos (CD_Productos.cs), es decir, esta clase es responsable de las consultas a la
base de datos o ejecutar comandos, referentes a la tabla Productos, como realizar las 4
operaciones CRUD. Usaremos la librería Data y Data.SqlClient.

SEGUIMOS EN LA LIBRERÍA DE CLASES DE DATOS.

En CapaDatos agregamos otra clase. La nombramos CD_Productos.cs y agregamos el código


siguiente:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;

namespace CapaDatos
{

OPP Arturo J. Rodriguez Nov. 27, 19


5

class CD_Productos

{
private CD_Conexion conexion = new CD_Conexion();
SqlDataReader leer;
DataTable tabla = new DataTable();
SqlCommand comando = new SqlCommand();

public DataTable Mostrar()


{
comando.Connection = conexion.AbrirConexion();
comando.CommandText = "MostrarProductos";
comando.CommandType = CommandType.StoredProcedure;
leer = comando.ExecuteReader();
tabla.Load(leer);
conexion.CerrarConexion();
return tabla;
}

public void Insertar(string nombre, string desc, string marca, double precio, int
stock)
{
comando.Connection = conexion.AbrirConexion();
comando.CommandText = "InsertarProductos";
comando.CommandType = CommandType.StoredProcedure;
comando.Parameters.AddWithValue("@nombre", nombre);
comando.Parameters.AddWithValue("@descrip", desc);
comando.Parameters.AddWithValue("@Marca", marca);
comando.Parameters.AddWithValue("@precio", precio);
comando.Parameters.AddWithValue("@stock", stock);

comando.ExecuteNonQuery();
comando.Parameters.Clear();
conexion.CerrarConexion();
}
public void Editar(string nombre, string desc, string marca, double precio,
int stock, int id)
{
comando.Connection = conexion.AbrirConexion();
comando.CommandText = "EditarProductos";
comando.CommandType = CommandType.StoredProcedure;
comando.Parameters.AddWithValue("@nombre",nombre);
comando.Parameters.AddWithValue("@descrip",desc);
comando.Parameters.AddWithValue("@Marca", marca);
comando.Parameters.AddWithValue("@precio", precio);
comando.Parameters.AddWithValue("@stock", stock);
comando.Parameters.AddWithValue("@id", id);

comando.ExecuteNonQuery();

comando.Parameters.Clear();
conexion.CerrarConexion();

}
public void Eliminar (int id)
{
comando.Connection = conexion.AbrirConexion();
comando.CommandText = "EliminarProducto";

OPP Arturo J. Rodriguez Nov. 27, 19


6

comando.CommandType = CommandType.StoredProcedure;
comando.Parameters.AddWithValue("@idpro", id);

comando.ExecuteNonQuery();

comando.Parameters.Clear();
conexion.CerrarConexion();
}

}
}

6. MODIFICACION DE CAPA DE NEGOCIOS: Agregamos una clase para el Objeto de Negocio


de Producto (CN_Productos.cs), en esta clase puedes realizar toda la lógica de negocio,
validaciones y seguridad. En este caso solo creamos métodos para invocar los métodos
creados previamente en la capa de acceso a datos, para ello, necesitamos importar la capa
de acceso a datos.

Observamos que da error

Tenemos que hacer las referencias entre proyectos entonces.

Y al hacer eso el error desaparece

El código es:

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CapaDatos;

namespace CapaNegocio
{
public class CN_Productos
{
private CD_Productos objetoCD = new CD_Productos();
public DataTable MostrarProd()
{

OPP Arturo J. Rodriguez Nov. 27, 19


7

DataTable tabla = new DataTable();


tabla = objetoCD.Mostrar();
return tabla;
}

public void InsertarProd (string nombre, string desc, string marca, string
precio, string stock)
{
objetoCD.Insertar(nombre, desc, marca, Convert.ToDouble(precio),
Convert.ToInt32(stock));

public void EditarProd(string nombre, string desc, string marca, string precio,
string stock, string id)
{
objetoCD.Editar(nombre, desc, marca, Convert.ToDouble(precio),
Convert.ToInt32(stock), Convert.ToInt32(id));
}

public void EliminarProd(string id)


{
objetoCD.Eliminar(Convert.ToInt32(id))
{
objetoCD.Eliminar(Convert.ToInt32(id));
}
}
}
}

7. Codificar Capa de Presentación. En el formulario, agregamos un DataGridView para


mostrar los datos, textboxes, labels, y tres botones para las funciones de Guardar,
Editar y eliminar.
Agregamos datagrid, txtNombre.Text, txtDesc.Text, txtMarca.Text, txtPrecio.Text,
txtStock.Text, btnGuardar, btnEditar, btnEliminar

OPP Arturo J. Rodriguez Nov. 27, 19


8

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using CapaNegocio;

namespace CapaPresentacion
{
public partial class Form1 : Form
{
CN_Productos objetoCN = new CN_Productos();
private string idProducto = null;
private bool Editar = false;
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)


{
MostrarProductos();
}
private void MostrarProductos()
{
CN_Productos objeto = new CN_Productos();
dataGridView1.DataSource = objeto.MostrarProd();
}

private void btnGuardar_Click(object sender, EventArgs e)


{
//insertar
if (Editar==false)
{
try
{
objetoCN.InsertarProd(txtNombre.Text, txtDesc.Text, txtMarca.Text,
txtPrecio.Text, txtStock.Text);
MessageBox.Show("Se ha insertado correctamente el producto");
MostrarProductos();
limpiarForm();
}
catch (Exception ex)
{
MessageBox.Show("Error. El producto no fue agregado " + ex);
}
}
if (Editar==true)
{
try
{
objetoCN.EditarProd(txtNombre.Text, txtDesc.Text, txtMarca.Text,
txtPrecio.Text, txtStock.Text, idProducto);

OPP Arturo J. Rodriguez Nov. 27, 19


9

MessageBox.Show("Se ha editado correctamente");


MostrarProductos();
limpiarForm();
Editar = false;
}
catch (Exception ex)
{
MessageBox.Show("no se pudo editar los datos. " + ex);
}
}
}

private void btnEditar_Click(object sender, EventArgs e)


{
if (dataGridView1.SelectedRows.Count > 0)
{
Editar = true;
txtNombre.Text =
dataGridView1.CurrentRow.Cells["Nombre"].Value.ToString();
txtMarca.Text = dataGridView1.CurrentRow.Cells["Marca"].Value.ToString();
txtDesc.Text =
dataGridView1.CurrentRow.Cells["Descripcion"].Value.ToString();
txtPrecio.Text =
dataGridView1.CurrentRow.Cells["Precio"].Value.ToString();
txtStock.Text = dataGridView1.CurrentRow.Cells["Stock"].Value.ToString();
idProducto = dataGridView1.CurrentRow.Cells["Id"].Value.ToString();
}
else MessageBox.Show("Seleccione una fila a editar");

}
private void limpiarForm()
{
txtNombre.Clear();
txtDesc.Clear();
txtMarca.Clear();
txtStock.Clear();
txtPrecio.Clear();

private void btnEliminar_Click(object sender, EventArgs e)


{
if (dataGridView1.SelectedRows.Count > 0)
{
idProducto = dataGridView1.CurrentRow.Cells["Id"].Value.ToString();
objetoCN.EliminarProd(idProducto);
MessageBox.Show("Eliminado!");
MostrarProductos();
}
else MessageBox.Show("Seleccione una fila por favor");
}
}
}

OPP Arturo J. Rodriguez Nov. 27, 19

Potrebbero piacerti anche