Creamos nuestra base de datos DBTeam, tabla clientes, el procedimiento almacenado para listar todo los clientes sp_listar_clientes, sp_mantenimiento_clientes bueno su propio nombre lo dice, en este caso se hará con opciones.
La opción 1 será para registrar un nuevo usuario y el código se autogenera.
La opción 2 será para modificar los datos del usuario.
La opción 3 será para eliminar por completo al usuario seleccionado y no olvidar sp_buscar_clientes.
create database DBTeam go use DBTeam go create table clientes ( codigo varchar(5), nombre varchar(50), edad int, telefono int ); go create proc sp_listar_clientes as select * from clientes order by codigo go create proc sp_buscar_clientes @nombre varchar(50) as select codigo,nombre,edad,telefono from clientes where nombre like @nombre + '%' go create proc sp_mantenimiento_clientes @codigo varchar(5), @nombre varchar(50), @edad int, @telefono int, @accion varchar(50) output as if (@accion='1') begin declare @codnuevo varchar(5), @codmax varchar(5) set @codmax = (select max(codigo) from clientes) set @codmax = isnull(@codmax,'A0000') set @codnuevo = 'A'+RIGHT(RIGHT(@codmax,4)+10001,4) insert into clientes(codigo,nombre,edad,telefono) values(@codnuevo,@nombre,@edad,@telefono) set @accion='Se genero el código: ' +@codnuevo end else if (@accion='2') begin update clientes set nombre=@nombre, edad=@edad, telefono=@telefono where codigo=@codigo set @accion='Se modifico el código: ' +@codigo end else if (@accion='3') begin delete from clientes where codigo=@codigo set @accion='Se borro el código: ' +@codigo end go
Capa_Entidad
Nuestros procedimientos en total trabajan con 5 parámetros entonces debemos de crear 5 propiedades publicas con el mismo tipo de dato.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Capa_Entidad { public class ClassEntidad { public String nombre { get; set; } public String codigo { get; set; } public int edad { get; set; } public int telefono { get; set; } public String accion { get; set; } } }
Capa_Datos
Realizamos las referencias a la capa entidad, System.Configuration. Data, SqlClient y creamos las funciones para cada procedimiento, listar, buscar y mantenimiento.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; using System.Data.SqlClient; using System.Configuration; using Capa_Entidad; namespace Capa_Datos { public class ClassDatos { SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["sql"].ConnectionString); public DataTable D_listar_clientes() { SqlCommand cmd = new SqlCommand("sp_listar_clientes", cn); SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); return dt; } public DataTable D_buscar_clientes(ClassEntidad obje) { SqlCommand cmd = new SqlCommand("sp_buscar_clientes", cn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@nombre", obje.nombre); SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); return dt; } public String D_mantenimiento_clientes(ClassEntidad obje) { String accion = ""; SqlCommand cmd = new SqlCommand("sp_mantenimiento_clientes", cn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@codigo", obje.codigo); cmd.Parameters.AddWithValue("@nombre", obje.nombre); cmd.Parameters.AddWithValue("@edad", obje.edad); cmd.Parameters.AddWithValue("@telefono", obje.telefono); cmd.Parameters.Add("@accion", SqlDbType.VarChar, 50).Value = obje.accion; cmd.Parameters["@accion"].Direction = ParameterDirection.InputOutput; if (cn.State == ConnectionState.Open) cn.Close(); cn.Open(); cmd.ExecuteNonQuery(); accion = cmd.Parameters["@accion"].Value.ToString(); cn.Close(); return accion; } } }
Capa_Negocio
Realizamos la referencia a la capa entidad, datos y llamamos a las funciones anteriormente creadas.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; using Capa_Datos; using Capa_Entidad; namespace Capa_Negocio { public class ClassNegocio { ClassDatos objd = new ClassDatos(); public DataTable N_listar_clientes() { return objd.D_listar_clientes(); } public DataTable N_buscar_clientes(ClassEntidad obje) { return objd.D_buscar_clientes(obje); } public String N_mantenimiento_cliente(ClassEntidad obje) { return objd.D_mantenimiento_clientes(obje); } } }
Formulario
Referencia a la capa entidad y negocio, objent representará a la capa entidad y objneg a la capa negocio, usamos las propiedades creadas en la capa entidad, estos tomarán un valor y dependiendo de la opción que le demos realizará una acción como registrar, modificar y eliminar.
using Capa_Entidad; using Capa_Negocio; namespace WindowsFormsApp1 { public partial class Form1 : Form { ClassEntidad objent = new ClassEntidad(); ClassNegocio objneg = new ClassNegocio(); public Form1() { InitializeComponent(); } void mantenimiento(String accion) { objent.codigo = txtcodigo.Text; objent.nombre = txtnombre.Text; objent.edad = Convert.ToInt32(txtedad.Text); objent.telefono = Convert.ToInt32(txttelefono.Text); objent.accion = accion; String men = objneg.N_mantenimiento_cliente(objent); MessageBox.Show(men, "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information); } void limpiar() { txtcodigo.Text = ""; txtnombre.Text = ""; txtedad.Text = ""; txttelefono.Text = ""; txtbuscar.Text = ""; dataGridView1.DataSource = objneg.N_listar_clientes(); } private void Form1_Load(object sender, EventArgs e) { dataGridView1.DataSource = objneg.N_listar_clientes(); } private void nuevoToolStripMenuItem_Click(object sender, EventArgs e) { limpiar(); } private void registrarToolStripMenuItem_Click(object sender, EventArgs e) { if (txtcodigo.Text == "") { if (MessageBox.Show("¿Deseas registrar a " + txtnombre.Text + "?", "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == System.Windows.Forms.DialogResult.Yes) { mantenimiento("1"); limpiar(); } } } private void modificarToolStripMenuItem_Click(object sender, EventArgs e) { if (txtcodigo.Text != "") { if (MessageBox.Show("¿Deseas modificar a " + txtnombre.Text + "?", "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == System.Windows.Forms.DialogResult.Yes) { mantenimiento("2"); limpiar(); } } } private void eliminarToolStripMenuItem_Click(object sender, EventArgs e) { if (txtcodigo.Text != "") { if (MessageBox.Show("¿Deseas eliminar a " + txtnombre.Text + "?", "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == System.Windows.Forms.DialogResult.Yes) { mantenimiento("3"); limpiar(); } } } private void txtbuscar_TextChanged(object sender, EventArgs e) { if (txtbuscar.Text != "") { objent.nombre = txtbuscar.Text; DataTable dt = new DataTable(); dt = objneg.N_buscar_clientes(objent); dataGridView1.DataSource = dt; } else { dataGridView1.DataSource = objneg.N_listar_clientes(); } } private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { int fila = dataGridView1.CurrentCell.RowIndex; txtcodigo.Text = dataGridView1[0,fila].Value.ToString(); txtnombre.Text = dataGridView1[1, fila].Value.ToString(); txtedad.Text = dataGridView1[2, fila].Value.ToString(); txttelefono.Text = dataGridView1[3, fila].Value.ToString(); } } }
App Config
No te olvides de modificar el nombre del servidor.
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /> </startup> <connectionStrings> <add name="sql" connectionString="server=localhost1\SQLEXPRESS;integrated security=true;database=DBTeam"/> </connectionStrings> </configuration>
Recuerda 👀
Puedes ver el vídeo para una explicación más clara.
No esta validado las cajas de texto.
- Visual Studio 2019
- Microsoft SQL Server Management Studio 18