Académique Documents
Professionnel Documents
Culture Documents
GUIA DE LABORATORIO:
MANTENIMIENTO DE REGISTROS DE EQUIPOS
2018
Página 1 de 15
Problema:
Implementar una aplicación Windows Forms que permita el mantenimiento de la tabla Equipo.
Implementar en SQL Server procedimientos almacenados que permitan listar, insertar, modificar y eliminar
registros de la tabla Equipo, además de implementar procedimientos almacenados que permitan listar los
datos de los tipos y estados de los equipos.
Crear la clase Conexión e implementar el método getConecta, el cual permita asociarse a la cadena de
conexión especificada en app.config.
Crear la clase LogicaNegocio e implementar los métodos necesarios para asociarse a todos los
procedimientos almacenados necesarios para el mantenimiento de registros de la tabla Equipo.
Usar un control ToolStrip para las opciones que permita el mantenimiento de registro de equipos.
GUI propuesto
Página 2 de 15
Solución:
1.- Seleccione Archivo > Nuevo Proyecto > Visual C# > Windows > Aplicación Windows Forms y asigne el
nombre al proyecto pjMantenimientoEquipo.
2.- Agregue la referencia System.Configuration, presionando clic derecho sobre el proyecto, luego en
Agregar > Referencia. Después, active el check en System.Configuration:
USE master
GO
Página 3 de 15
4.2.- Script de creación de tablas: EQUIPO, TIPO_EQUIPO y ESTADO_EQUIPO
/* CREACION DE TABLAS */
USE CONTRATO
GO
4.3.- Script de creación de la Primary Key de las tablas: EQUIPO, TIPO_EQUIPO y ESTADO_EQUIPO
ALTER TABLE EQUIPO ADD PRIMARY KEY (IDE_EQU)
GO
4.4.- Script de creación de la Foreign Key de las tablas: EQUIPO, TIPO_EQUIPO y ESTADO_EQUIPO y establecer
las relaciones entre ellas
ALTER TABLE EQUIPO
ADD FOREIGN KEY (COD_TIP_EQU)
REFERENCES TIPO_EQUIPO
GO
Página 4 de 15
4.5.- Script ingreso de datos en las tablas: EQUIPO, TIPO_EQUIPO y ESTADO_EQUIPO
-- REGISTROS DE LA TABLA: TIPO DE EQUIPO
INSERT INTO TIPO_EQUIPO VALUES
('TIP001','MONITOR'),
('TIP002','MOUSE'),
('TIP003','PARLANTES'),
('TIP004','TECLADO'),
('TIP005','CPU'),
('TIP006','LAPTOP'),
('TIP007','AUDIFONOS'),
('TIP008','PROYECTOR'),
('TIP009','IMPRESORA'),
('TIP010','FOTOCOPIADORA')
GO
Página 5 de 15
-- Procedimiento: Lista tipo EQUIPOS
IF OBJECT_ID('SP_LISTATIPOEQUIPOS') IS NOT NULL
DROP PROC SP_LISTATIPOEQUIPOS
PRINT 'PROC SP_LISTATIPOEQUIPOS, HA SIDO PROCESADO'
GO
Página 6 de 15
-- Procedimiento: Actualización de campos en registros en la tabla EQUIPO
IF OBJECT_ID('SP_ACTUALIZAEQUIPO') IS NOT NULL
DROP PROC SP_ACTUALIZAEQUIPO
PRINT 'PROC SP_ACTUALIZAEQUIPO, HA SIDO PROCESADO'
GO
GO
Página 7 de 15
5.- Configuración del archivo de configuración app.config con la cadena de conexión desde el explorador de
soluciones.
App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="cn"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
Si no funciona el punto en el Data Source por el nombre de la máquina (consultar con el profesor)
Fuente:
http://www.elguille.info/NET/ADONET/cadena_de_conexion_para_conectar_a_una_base_de_sql_server.h
tm
Conexión.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace pjMantenimientoEquipo
{
class Conexion
{
public SqlConnection getConecta()
{
SqlConnection cn = new SqlConnection(ConfigurationManager.
ConnectionStrings["cn"].ConnectionString);
return cn;
}
}
}
Página 8 de 15
7.- Agregar la clase LogicaNegocio y coloque el siguiente código:
LogicaNegocio.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace pjMantenimientoEquipo
{
class LogicaNegocio
{
// Defnicion global
Conexion objCon = new Conexion();
SqlConnection cn = new SqlConnection();
string mensaje;
Página 9 de 15
// Método que registra un nuevo equipo
public string nuevoEquipo(string codigo, string tipo, string descripcion,
double precio, string estado)
{
mensaje = "";
cn = objCon.getConecta();
SqlCommand cmd = new SqlCommand("SP_NUEVOEQUIPO", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("cod", SqlDbType.Char).Value = codigo;
cmd.Parameters.Add("tip", SqlDbType.Char).Value = tipo;
cmd.Parameters.Add("des", SqlDbType.VarChar).Value = descripcion;
cmd.Parameters.Add("pre", SqlDbType.Money).Value = precio;
cmd.Parameters.Add("est", SqlDbType.Char).Value = estado;
try
{
int n = cmd.ExecuteNonQuery();
mensaje = n.ToString() + " EQUIPO REGISTRADO CORRECTAMENTE";
}
catch (SqlException ex)
{
mensaje = ex.Message;
}
finally
{
cn.Close();
}
return mensaje;
}
try
{
int n = cmd.ExecuteNonQuery();
mensaje = n.ToString() + " EQUIPO ACTUALIZADO CORRECTAMENTE";
}
catch (SqlException ex)
{
mensaje = ex.Message;
}
finally
{
cn.Close();
}
return mensaje;
}
Página 10 de 15
// Método que elimina un registro de equipo
public string eliminaEquipo(string codigo)
{
mensaje = "";
cn = objCon.getConecta();
cn.Open();
SqlCommand cmd = new SqlCommand("SP_ELIMINAEQUIPO", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("cod",SqlDbType.Char).Value = codigo;
try
{
int n = cmd.ExecuteNonQuery();
mensaje = n.ToString() + " EQUIPO ELIMINADO CORRECTAMENTE";
}
catch (SqlException ex)
{
mensaje = ex.Message;
}
finally
{
cn.Close();
}
return mensaje;
}
}
}
frmMantenimientoEquipo.cs[Design]
Página 11 de 15
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Globalization;
using System.Threading;
namespace pjMantenimientoEquipo
{
public partial class frmMantenimientoEquipo : Form
{
LogicaNegocio objL = new LogicaNegocio();
public frmMantenimientoEquipo()
{
InitializeComponent();
}
{
llenaTipo();
llenaEstado();
llenaEquipos();
lblCodigo.Text = generaCodigo();
}
void llenaTipo()
{
cboTipo.DataSource = objL.listaTipoEquipos();
cboTipo.DisplayMember = "TIPO";
cboTipo.ValueMember = "CODIGO";
}
void llenaEstado()
{
cboEstado.DataSource = objL.listaEstado();
cboEstado.DisplayMember = "TIPO";
cboEstado.ValueMember = "CODIGO";
}
void llenaEquipos()
{
dgEquipos.DataSource = objL.listaEquipos();
}
string generaCodigo()
{
return objL.generaCodigo();
}
void limpiarControles()
{
txtDescripcion.Clear();
cboEstado.SelectedIndex = -1;
cboTipo.SelectedIndex=-1;
txtPrecio.Clear();
txtDescripcion.Focus();
}
Página 12 de 15
private void txtPrecio_KeyPress(object sender, KeyPressEventArgs e)
{
CultureInfo cc = System.Threading.Thread.CurrentThread.CurrentCulture;
if(char.IsNumber(e.KeyChar)||e.KeyChar.ToString()==cc.NumberFormat.
NumberDecimalSeparator)
{
e.Handled=false;
}
else
{
e.Handled=true;
}
}
{
if (valida() == "")
{
// Capturando los datos del formulario
string codigo = lblCodigo.Text;
string descripcion = txtDescripcion.Text;
string tipo = cboTipo.SelectedValue.ToString();
string estado = cboEstado.SelectedIndex.ToString();
double precio = double.Parse(txtPrecio.Text);
// Eliminado
string mensaje = objL.eliminaEquipo(codigo);
MessageBox.Show(mensaje);
llenaEquipos();
}
{
lblCodigo.Text = dgEquipos.CurrentRow.Cells[0].Value.ToString();
txtDescripcion.Text = dgEquipos.CurrentRow.Cells[1].Value.ToString();
cboTipo.Text = dgEquipos.CurrentRow.Cells[2].Value.ToString();
cboEstado.Text = dgEquipos.CurrentRow.Cells[4].Value.ToString();
txtPrecio.Text = dgEquipos.CurrentRow.Cells[3].Value.ToString();
}
string valida()
{
if(txtDescripcion.Text.Trim().Length==0)
{
txtDescripcion.Clear();
txtDescripcion.Focus();
return " la descripcion del equipo";
}
else if (cboTipo.SelectedIndex==-1)
{
cboTipo.Focus();
return " el tipo de equipo";
}
else if(cboEstado.SelectedIndex==-1)
{
cboEstado.Focus();
return " el estado del equipo";
}
else if(txtPrecio.Text.Trim().Length == 0)
{
txtPrecio.Clear();
txtPrecio.Focus();
return " el precio del equipo";
}
else
return "";
}
}
}
Página 14 de 15
Diseño del formulario:
Página 15 de 15