Contenido págin
a
Objetivos:
Creación de una aplicación Windows con acceso a base de datos en la cual se emplee los componentes
ADO.NET: Controles de acceso a datos como SqlConnection, Dataset, SqlDataAdapter.
Creación de habilidades en el manejo de Clases de ADO.NET en aplicaciones Windows con C# y ql
Server.
EJERCICIO 1:
Crear una aplicación denominada buscar productos el cual permita buscar productos en una base de
datos permitiendo introducir un criterio de búsqueda como ser una parte del nombre de algún
producto y la aplicación debe consultar la tabla producto de la base de datos bdinventario y mostrar
los productos que coincidan con el criterio de búsqueda introducido por el usuario.
Seleccione el texto sql escrito y presione F5 para ejecutar el comando sql escrito. (Asegúrese
que muestre un mensaje Comandos completados con éxito
Ejecutar la aplicación
Objetivos:
Preparar los proyectos necesarios en c# para la implementación de una aplicación Windows bajo la
arquitectura en tres capas, reutilizando la capa de acceso a datos implementado en el proyecto
Servicios, y un proyecto denominado utilitarios con funcionalidades generales en la aplicación.
EJERCICIO 1:
Crear una solución en C# con un proyecto de tipo Aplicación de Windows (Con el nombre
CapaDePresentacion, Un proyecto de tipo Biblioteca de clases (con el nombre CapaDeNegocio)
Un proyecto de tipo Biblioteca de clases Servicios (Este debe ser agregado como proyecto
existente, al igual que el proyecto Utilitarios. Para este laboratorio requiere los proyectos Servicios
y Utilitarios.
Hasta aquí tenemos dos proyectos en nuestra solución, ahora agregaremos la tercera capa, la
capa de Acceso a datos que esta implementada en el proyecto Servicios, asi como también el
proyecto utilitarios, Oberve en el explorador de Windows como queda distribuida las carpetas de
su solución.
Dentro de la solución inventario tenemos las carpetas de los dos proyectos CapaDeNegocio,
CapaDePresentacion, ahora copiaremos en la carpeta inventario las dos carpetas adjuntas a este
laboratorio (Servicios y Utilitario) de modo tal que quede distribuida de la siguiente manera:
Finamente tenemos lista nuestra solución con los proyectos necesarios para programar el modelo
en tres capas, para finalizar agregamos las referencias entre los distintos proyectos de la solución.
En el proyecto Utilitario debe tener una referencia a Servicio, revisar si ya tiene en caso de no
tener agregar una referencia a Servicio.
Ahora si ya tenemos, todos los proyectos referenciados y solo queda empezar a programar en
diferentes proyectos los códigos que correspondan según el modelo de tres capas. (Este resultado
se utilizara para los demás proyectos.
Ejecutar la consulta para que tengamos una tabla almacén en la base de datos.
Crear una nueva consulta para crear el siguiente procedimiento almacenado
Modificamos solo el constructor cambiando los atributos BaseDatos por el nombre de la base de
datos en este caso “bdinventario”, el nombre del servidor “.” Indicando que es servidor local.
Agregamos una nueva clase a la capa de negocio
namespace CapaDeNegocio
{
public class Almacen : DAL.TDatosSql
{
#region "Atributos"
Int64 id_almacen;
string nombre;
#endregion
#region "Propiedades"
public Almacen()
{
id_almacen = 0;
nombre = "";
}
public Int64 pid_almacen
{
set{id_almacen = value;}
get{return id_almacen;}
}
public string pnombre
Elaborado por erick valverde docente UTEPSA
Programación II Guía de Laboratorios 17
{
set{nombre = value;}
get{return nombre;}
}
#endregion
#region "Metodos"
int ABM(Utilitario.Utilitario._ABM tarea)
{
int resultado = 0;
System.Object[] P = new System.Object[5];
P[0] = tarea;
P[1] = pid_almacen;
P[2] = pnombre;
P[3] = resultado;
//llamar a un procedimiento almacenado
resultado = Ejecutar("SP_ABMAlmacen", P);
return resultado;
}
public int guardar()
{
return ABM(Utilitario.Utilitario._ABM.Guardar);
}
public int eliminar()
{
return ABM(Utilitario.Utilitario._ABM.Eliminar);
}
public int modificar()
{
return ABM(Utilitario.Utilitario._ABM.Modificar);
}
public DataTable buscarAlmacen(string criterio)
{
System.Object[] P = new System.Object[1];
P[0] = criterio;
return TraerDataTable("SP_buscarAlmacen", P);
}
public DataTable traerAlmacen()
{
System.Object[] P = new System.Object[1];
P[0] = pid_almacen;
return TraerDataTable("SP_traerAlmacen", P);
}
#endregion
}
}
Agregamos una nueva clase a la capa de negocio con el nombre CtrlAlmacen.cs con el siguiente
código:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace CapaDeNegocio
{
public class CtrlAlmacen : DAL.TDatosSql
{
public int guardar(Almacen objAlmacen)
Elaborado por erick valverde docente UTEPSA
Programación II Guía de Laboratorios 18
{
return objAlmacen.guardar();
}
public int modificar(Almacen objAlmacen)
{
return objAlmacen.modificar();
}
public int eliminar(Almacen objAlmacen)
{
return objAlmacen.eliminar();
}
public DataTable buscarAlmacen(string criterio)
{
Almacen objAlmacen = new Almacen();
criterio = "%" + criterio + "%";
return objAlmacen.buscarAlmacen(criterio);
}
}
}
TextBox, DataGridView,Button
namespace CapaDePresentacion
{
public partial class FrmBuscarAlmacen : Form
{
public CapaDeNegocio.Almacen Registro = new
CapaDeNegocio.Almacen();
public FrmBuscarAlmacen()
{
InitializeComponent();
}
public void ProcesarBuscar(KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
Elaborado por erick valverde docente UTEPSA
Programación II Guía de Laboratorios 20
{
CapaDeNegocio.CtrlAlmacen objCA = new
CapaDeNegocio.CtrlAlmacen();
dataGridView1.DataSource =
objCA.buscarAlmacen(tbCriterio.Text);
}
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
Elaborado por erick valverde docente UTEPSA
Programación II Guía de Laboratorios 21
using System.Text;
using System.Windows.Forms;
namespace CapaDePresentacion
{
public partial class FrmAlmacen : Form
{
Utilitario.Utilitario._ABM estado;
public FrmAlmacen()
{
InitializeComponent();
}
lbEstado.Text = "MODIFICAR";
tbNombre_Almacen.Focus();
}
else
MessageBox.Show("BUSQUE UN ALMACEN PARA MODIFICAR");
}
break;
case Utilitario.Utilitario._ABM.Eliminar:
procesarEliminar();
break;
}
controlarConsulta();
}
catch (Exception E)
{
MessageBox.Show(E.Message);
}
}
public void procesarGuardar()
{
CapaDeNegocio.Almacen objA = new CapaDeNegocio.Almacen();
objA.pid_almacen = Convert.ToInt64(tbId_Almacen.Text);
objA.pnombre = tbNombre_Almacen.Text;
CapaDeNegocio.CtrlAlmacen objCA = new
CapaDeNegocio.CtrlAlmacen();
if (objCA.guardar(objA) == 1)
MessageBox.Show("ALMACEN GUARDADO");
else
MessageBox.Show("NO SE PUDO GUARDAR EL NUEVO ALMACEN");
}
public void procesarModificar()
{
CapaDeNegocio.Almacen objA = new CapaDeNegocio.Almacen();
objA.pid_almacen = Convert.ToInt64(tbId_Almacen.Text);
objA.pnombre = tbNombre_Almacen.Text;
CapaDeNegocio.CtrlAlmacen objCA = new
CapaDeNegocio.CtrlAlmacen();
if (objCA.modificar(objA) == 1)
MessageBox.Show("ALMACEN MODIFICADO");
else
MessageBox.Show("NO SE PUDO MODIFICAR EL ALMACEN");
}
public void procesarEliminar()
{
CapaDeNegocio.Almacen objA = new CapaDeNegocio.Almacen();
objA.pid_almacen = Convert.ToInt64(tbId_Almacen.Text);
objA.pnombre = tbNombre_Almacen.Text;
CapaDeNegocio.CtrlAlmacen objCA = new
CapaDeNegocio.CtrlAlmacen();
if (objCA.eliminar(objA) == 1)
MessageBox.Show("ALMACEN ELIMINADO");
else
MessageBox.Show("NO SE PUDO ELIMINAR EL ALMACEN");
}
}
}
Finalmente Cambiamos el nombre del formulario Form1.cs el cual estaba por defecto en la capa
de Presentación le ponemos el nombre de FrmPrincipal.cs
Cambiar la propiedad ToolTipText por un texto aclarativo sobre las teclas de acceso rápido para
cada uno de los botones de comandos como por ejemplo para el btnNuevo: Ctrl + N, para el
btnModificar: Ctrl + M y así sucesivamente para obtener cuando este en ejecución la siguiente
apariencia:
GO
INSERT INTO PRODUCTO VALUES (1,1,'LECHE PIL BLANCA BOLSA 1
LTS.',2.5,10,100)
INSERT INTO PRODUCTO VALUES (2,1,'LECHE LA CAMPIÑA BLANCA BOLSA 1
LTS.',1.5,2,20)
INSERT INTO PRODUCTO VALUES (3,1,'LECHE DEL CAMPO BLANCA BOLSA 1
LTS.',1.5,2,20)
INSERT INTO PRODUCTO VALUES (4,2,'YOGURT PIL 90 CC VASITOS',1.20,10,100)
INSERT INTO PRODUCTO VALUES (5,2,'YOGURT PIL LIGTH 90 CC
VASITOS',2.50,10,20)
EJERCICIO 1:
Crear procedimientos almacenados (AMB),(Traer, Busquedas), para cada una de las tablas creadas en
el ejercicio del laboratorio 5
Abrir Sql Server Management Studio
Click derecho sobre la bdinventario y elegir nueva consulta
En la consola de sql creada escribir el siguiente script para la creación de los procedimientos
almacenados
GO
GO
where id_proveedor=@id_proveedor
end
if (@tarea=2)
begin
delete from natural where id_proveedor=@id_proveedor
end
if (@@error <> 0)--Valor de control de transaccion
begin
set @resultado=0
return(0)
end
else
begin
set @resultado=1
return(0)
end
GO
Elaborado por erick valverde docente UTEPSA
Programación II Guía de Laboratorios 32
GO
CREATE Procedure SP_ABMSubTipoProducto
@tarea integer,--0=guardar 1=actualizar 2=Eliminar
@id_subtipoproducto codigo,
@id_tipoproducto codigo,
@nombre_subtipoproducto varchar(100),
@resultado integer output --1=ok 0=error
AS
if (@tarea=0)
begin
insert into subtipoproducto values
(@id_subtipoproducto,@id_tipoproducto,@nombre_subtipoproducto)
end
if (@tarea=1)
begin
update subtipoproducto set
id_tipoproducto = @id_tipoproducto,
nombre_subtipoproducto=@nombre_subtipoproducto
where id_subtipoproducto=@id_subtipoproducto
end
if (@tarea=2)
begin
delete from subtipoproducto where
id_subtipoproducto=@id_subtipoproducto
end
if (@@error <> 0)--Valor de control de transaccion
begin
set @resultado=0
return(0)
Elaborado por erick valverde docente UTEPSA
Programación II Guía de Laboratorios 33
end
else
begin
set @resultado=1
return(0)
end
GO
GO
values (@id_almacen,@id_producto,@stock_producto)
end
if (@tarea=1)
begin
update existencia set
stock_producto= @stock_producto
where id_almacen = @id_almacen and id_producto=@id_producto
end
if (@tarea=2)
begin
delete from existencia
where id_almacen = @id_almacen and id_producto=@id_producto
end
if (@@error <> 0)--Valor de control de transaccion
begin
set @resultado=0
return(0)
end
else
begin
set @resultado=1
return(0)
end
GO
set @resultado=1
return(0)
end
GO
GO
If(@id_proveedor = 0)
begin
SELECT * from juridico
End
Else
Begin
SELECT * FROM juridico
WHERE id_proveedor = @id_proveedor
End
GO
GO
GO
Begin
SELECT * FROM producto
WHERE id_producto = @id_producto
End
GO
(
SELECT p.Id_Proveedor,j.Razon_Social as
NombreProveedor,p.nit,p.direccion,'J' as tipo
FROM Proveedor p join Juridico j on p.Id_Proveedor=j.Id_Proveedor
WHERE j.Razon_Social like @criterio
)
GO
Objetivos:
Crear un reporte en Crystal Report Sobre el modelo de proyecto en tres capas. Agregando una cuarta
capa para la gestión de reportes
EJERCICIO 1:
Crear un reporte bajo el modelo en tres capas que muestre una lista de empleados agrupados por
puesto de trabajo.
1.- Agregar a la solucion un nuevo proyecto de tipo class library (Librería de clases nueva)
con el nombre reportes
2.- Agregar un nuevo elemento al proyecto reportes de tipo (conjunto de datos) con el
nombre DSreportes.xsd (este almacenara los datos para los reportes)
Ver grafico ….
Veras las conexiones de bases de datos existentes con todas las tablas de la bd.
4.- Arrastra con el mouse cada tabla del explorador de soluciones encima del contenedor
del archivo DSreportes.xsd.
Si las tablas tienen alguna relación se mostrar la relación existente mediante una línea.
5.- Agregar una nueva clase al proyecto reportes con el nombre CtrlReportes.cs
Con el siguiente código:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
namespace Reportes
{
public class CtrlReportes
{
public DataSet ListadoAlmacen(Int64 IdAlmacen)
{
DataSet dsReportes= new DataSet();
Negocio.Almacen objalmacen=new Negocio.Almacen();
objalmacen.pidAlmacen = IdAlmacen;
dsReportes.Tables.Add(objalmacen.Traer_Almacen ());
dsReportes.Tables[0].TableName = "Almacen";
return dsReportes;
}
dsReportes.Tables[0].TableName = "Pedido";
/*detalle*/Negocio.Gestion_de_pedidos.Detalle_Pedido objdetalle = new
Negocio.Gestion_de_pedidos.Detalle_Pedido();
objdetalle.pId_Pedido = Idpedido;
dsReportes.Tables.Add(objdetalle.Traer_DetallePedido());
dsReportes.Tables[1].TableName = "Detalle_Pedido";
/*producto*/Negocio.Gestion_de_productos.Producto objproducto = new
Negocio.Gestion_de_productos.Producto();
dsReportes.Tables.Add(objproducto.Traer_producto ());
dsReportes.Tables[2].TableName = "Producto";
/*Proveedor*/Negocio.Gestion_de_proveedor.persistente.Proveedor
objproveedor= new Negocio.Gestion_de_proveedor.persistente.Proveedor();
dsReportes.Tables.Add(objproveedor.Traer_proveedor());
dsReportes.Tables[3].TableName = "Proveedor";
/*Proveedor*/Negocio.Gestion_de_proveedor.persistente.Natural
objnatural = new Negocio.Gestion_de_proveedor.persistente.Natural();
dsReportes.Tables.Add(objnatural.Traer_Natural ());
dsReportes.Tables[4].TableName = "Natural";
/*TipoProducto*/Negocio.Gestion_de_productos.TipoProducto
objtipoProducto = new Negocio.Gestion_de_productos.TipoProducto();
dsReportes.Tables.Add(objtipoProducto.Traer_TipoProducto
());
dsReportes.Tables[5].TableName = "TipoProducto";
/*TipoProducto*/Negocio.Gestion_de_productos.SubTipoProducto
objsubtipoProducto =new Negocio.Gestion_de_productos.SubTipoProducto();
dsReportes.Tables.Add(objsubtipoProducto.Traer_SubTipoProducto ());
dsReportes.Tables[6].TableName = "SubTipoProducto";
return dsReportes;
}
}
}
6.- Agregamos referencias al proyecto reportes con los demás proyectos capadenegocio,
utilitarios, servicios.
Ahora hay que agregar las tablas y los campos que usaremos en el reporte para eso
utilizamos la conexión que ya hemos trabajado en el archivo xsd.
Click derecho sobre Campos de base de datos y luego Asistente de base de datos como en
el grafico anterior.
Seleccionas datos del proyecto y ADO.NET DATASETS y seleccionas las tablas que
necesites para el proyecto y lo pasas a tablas seleccionadas con el mouse (haciendo click
en … >)
Luego haces click en aceptar y te listo ahora solo falta arrastrar los campos disponibles
hasta las bandas del reporte donde se quiere que aparezcan.
Bueno luego el reporte tiene una parte que dice sesión detalle para este reporte
necesitaremos dos sesiones ya que se mostrara tipo maestro detalle empleados que
pertenecen a un determinado puesto por lo tango agregamos una nueva sesión de detalle
Finalmente arrastramos los campos de las tablas como se quiere que aparezcan en el
reporte
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace reportes
{
public partial class FrmReportes : Form
{
public FrmReportes()
{
InitializeComponent();
}
R1.SetDataSource(CR1.ListadoEmpleadoPorPuesto(Utilitario.Utilitario.id_p
uesto));
visor.ReportSource = R1;
break;
case 2:
/* aqui los demas reportes
Elaborado por erick valverde docente UTEPSA
Programación II Guía de Laboratorios 47
Reportes.Gestion_de_pedidos.RptPedido
objrptpedido=new Reportes.Gestion_de_pedidos.RptPedido();
objrptpedido.SetDataSource(objCtrlReporte.ListadoPedido(Utilitario.Utili
tario.Id_Pedido));
visor.ReportSource = objrptpedido;
*/
break;
}
}
if (dat.Hour.ToString().Length == 1)
{
Hora = "0" + dat.Hour.ToString();
}
else
{
Hora = dat.Hour.ToString();
}
if (dat.Minute.ToString().Length == 1)
{
Minuto = "0" + dat.Minute.ToString();
}
Elaborado por erick valverde docente UTEPSA
Programación II Guía de Laboratorios 48
else
{
Minuto = dat.Minute.ToString();
}
if (dat.Second.ToString().Length == 1)
{
Segundo = "0" + dat.Second.ToString();
}
else
{
Segundo = dat.Second.ToString();
}
return Int64.Parse(dat.Year.ToString() +
dat.Month.ToString() + dat.Day.ToString() + Hora + Minuto + Segundo);
}
public static DateTime leerfecha()
{
DataTable dtfecha = new DataTable();
DAL.TDatosSql objs=new DAL.TDatosSql();
dtfecha =objs.TraerDataTable("SP_traer_fecha") ;
return DateTime.Parse (dtfecha.Rows[0]
[0].ToString());
}
#endregion
}
}
namespace Capadepresentacion
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Utilitario.Utilitario.id_puesto =
Convert.ToInt32(textBox1.Text);
reportes.FrmReportes F = new reportes.FrmReportes();
Utilitario.Utilitario.Reporte = 1;
F.Show();
}
private void button1_Click(object sender, EventArgs e)
{
imprimir();
}
}
}