Documente Academic
Documente Profesional
Documente Cultură
Instalación:
Ingresar a la página de Visual Studio y seleccionar la versión de Visual Studio que desea
bajar, en el caso de nosotros tenemos la opción
Enterprise: El profesor los tiene q haber registrado
Community: Esta versión es gratuita.
Programacion de Apliciones Distribuidas
Console:
Para crear una
aplicación de Windows:
Vamos a
“Archivo”,“Nuevo”
“Proyecto…”:
WinForm
Vamos a “Archivo”,
“Nuevo”, “Sitio web…”.
Programacion de Apliciones Distribuidas
Luego elegimos la
Nos aparecerá la
siguiente ventana,
donde elegimos
“Formulario Web
Forms”. Podemos
poner un nombre que
por defecto es
Default.aspx. Y luego
hacemos clic en
Agregar:
Programacion de Apliciones Distribuidas
En la siguiente pantalla vemos cómo armar la página web, donde primero vamos a poner la
opción de “Dividir”(1) para que nos muestre la pantalla de la página web. En el cuadro de
Herramientas vamos a arrastrar el tipo Label (2) hacia la página web y a la derecha en su
respectiva propiedad en la opción de Text pondremos su nombre (3) y así con el TextBox
(4), Button (5):
Después de hacer el paso anterior, hacemos doble clic en el Button y nos lleva al código del
evento Button_Click donde escribimos el siguiente código:
Luego hacemos clic en iniciar y nos abrirá el explorador web por defecto, en el caso que no
tengan configurado otro y van a ver la página web creada donde ingresamos el nombre y
presionamos el botón aceptar y nos mostrará Hola “el nombre ingresado”.
Programacion de Apliciones Distribuidas
Sobre nuestro formulario agregamos dos botones para que nos lleven a los otros
formularios y un label para el título
Programacion de Apliciones Distribuidas
Desde las propiedades de los botones y el label modificamos el texto que muestran
Ahora agregaremos el menú con el que también nos desplazamos de una ventana a otra,
para ello seleccionamos un MenuStrip
Programacion de Apliciones Distribuidas
Se nos habilitará en nuestro formulario un menú que deberemos completar con las opciones
que nos permitirán ir de una ventana a otra
También podemos en lugar de agregar texto, seleccionar en la flecha del borde derecho, un
elemento de menú como una barra separadora
Ahora nos queda agregar las ventanas hacia donde navegaran los botones y barra de
menú, para ello desde la barra de menú seleccionamos Proyect y allí Add Windows Form…
Y así nos aparecerá una nueva pestaña con el Form2
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EjemloVentanas
{
class Ventanas
{
static Form1 form1 = new Form1();
static VentanaProductos vp = new VentanaProductos ();
static VentanaClientes vc = new VentanaClientes ();
static Login lg = new Login();
public static void mostrarPrincipal() {
form1.Show();
vp.Hide();
vc.Hide();
lg.Hide();
}
public static void mostrarProductos() {
form1.Hide(); vp.Show(); vc.Hide();
}
public static void mostrarClientes() {
ocultarVentanas();
vc.Show();
}
public static void ocultarVentanas() {
form1.Hide(); vp.Hide(); vc.Hide(); lg.Hide();
}
public static System.Windows.Forms. Form getPrincipal() {
return lg;
}
}
}
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;
namespace EjemloVentanas
{
public partial class Login : Form
{
public Login()
{
InitializeComponent();
}
3 - Creación de un archivo de base de datos local, con las siguientes
tablas y datos de ejemplo. Agregar ejemplos de instrucciones sql de
select/join, insert, update y delete (Autor: José De la Cruz). CamStudio:
(Gomez Francisco Emanuel, Espeche Maximiliano)
Programacion de Apliciones Distribuidas
descripcion VARCHAR(200)
);
);
4 - Creación de aplicación de consola que utilice el archivo de base de
datos local creado en el punto 3, y realice ABMC sobre la tabla de Cliente
utilizando ADO.NET - SQLConnection, SqlCommand, SqlDataReader.
(Autores: Rivadeneira).CamStudio: (Brizuela Carlos Alfredo).
https://gist.github.com/ezekielriva/dd3512eb114f69b973ec
5 - Creación de aplicación de Ventanas que utilice el archivo de base de
datos local creado en el punto 3, y realice ABMC sobre la tabla de Cliente
utilizando ADO.NET - SQLConnection, SqlCommand, SqlDataReader.
(Autores: Díaz Falcao, Gutiérrez). CamStudio: (Veliz Juan, Sale Carlos
Gabriel)
Creación del proyecto e importación de la base de datos
Creamos un nuevo proyecto, en este caso una aplicación de Windows Forms. Luego, lo
primero que haremos en nuestro proyecto es importar la base de datos del punto 3. Para
ello necesitaremos tener el archivo de la base de datos (.mdf):
Luego elegimos “Conjunto de datos” como modelo de base de datos a usar y presionamos
Siguiente. Ahora elegimos la conexión de datos. Para ello crearemos una nueva conexión:
Programacion de Apliciones Distribuidas
Creación de la clase Conexión
Lo que haremos a continuación es agregar a nuestro proyecto una clase “Conexión” donde
definiremos la conexión a la base de datos y un método para ejecutar los query sobre la
base de datos:
class Conexion
{
//creamos un objeto conexion con la cadena de conexion a la //base de datos
Programacion de Apliciones Distribuidas
En la ventana principal
agregaremos un
MenuStrip desde el
cuadro de herramientas.
A éste le agregaremos
los ítems para poder
acceder a los otros
formularios (Nuevo
cliente y Listar clientes).
Programacion de Apliciones Distribuidas
En la ventana Nuevo Cliente tenemos labels y textBoxs para cargar los datos del cliente,
también tenemos los botones para guardar, borrar los datos o cancelar. El botón guardar
realizará la acción de crear un nuevo cliente en la base de datos con los campos que
ingresemos en esta ventana.
En la ventana
Listar Clientes
tenemos un
DataGridView (que
agregamos del
cuadro de
herramientas)
donde se
mostrarán los
datos de los
clientes que
existen en la base
de datos.
Clase Controlador
Creamos una clase “Controlador” que será la que contenga todos los métodos del manejo
de las ventanas y las acciones que realicen los componentes de las mismas.
En esta clase instanciaremos los formularios a utilizar y un objeto conexión para poder
ejecutar los query:
con.ejecutarQuery(guardar);
lc.actualizarTabla();
}
Donde Tb1, Tb2, etc. son propiedades que obtienen el valor ingresado en los textBox.
El botón Editar en la ventana de Listar clientes lo que hará es llamar a un método que
obtenga los datos de la tabla y los envíe al formulario Editar Cliente, donde Dgv1 es la
propiedad del DataGridView que permite obtener los datos del mismo:
string fec_nac =
lc.Dgv1.SelectedRows[0].Cells[4].Value.ToString();
string anio = fec_nac.Substring(6, 4);
string mes = fec_nac.Substring(3, 2);
string dia = fec_nac.Substring(0, 2);
string telefono =
lc.Dgv1.SelectedRows[0].Cells[5].Value.ToString();
string email =
lc.Dgv1.SelectedRows[0].Cells[6].Value.ToString();
EditarCliente ec = new
EditarCliente(id,nombre,apellido,direccion,dia,mes,anio,telefono,email);
ec.Show();
}
Luego en la ventana Editar Cliente, el botón Guardar actualizará los datos en la base de
datos:
con.ejecutarQuery(eliminar);
lc.actualizarTabla();
}
}
6 - Creación de aplicación Web Forms que utilice el archivo de base de
datos local creado en el punto 3, y realice ABMC sobre la tabla de
Producto utilizando - SQLConnection, SqlCommand, SqlDataReader.
(Autores:PALACIO ALBERTO FEDERICO). CamStudio: (Barrientos Gabriel -
Pasteris Lucas)
Creación de la página web Forms
Usando lo que aprendimos del ejercicio 2 crearemos un nuevo Sitio web y le agregamos un
nuevo item
Elegimos Web Form y la llamamos Defaul.aspx.
Lo que generará una tabla en nuestra form con el contenido de la base de datos de la tabla
productos.
Alta de Producto
Agregamos un link debajo de la tabla, con el nombre “Agregar Producto” y Creamos una
nueva form llamada Alta.aspx a la cual será el destino del link que creamos.
En la form Alta.aspx le agregaremos labels y textBox hasta que nos quede así.
Programacion de Apliciones Distribuidas
Al botón “Agregar Producto” le asignamos un evento, haciendo doble clic sobre él, al cual le
agregaremos el siguiente código el cual se conecta con la base de datos y agrega el
contenido de los textBox.
Programacion de Apliciones Distribuidas
Modificar un Producto
En la form Default.aspx hago clic en la tabla para seleccionar las opciones “GridView Taks”
y habilitó el “enable selection”, el cual agrega una columna a la tabla “select” sobre
cualquiera hago doble clic, para generar un evento que contendrá la fila de la tabla
seleccionada en Defaul.aspx.cs.
De la fila extraigo la columna que tiene el id del producto y lo envió a una nueva form que
crearemos con el nombre “Modificar.aspx”.
En la Form “Modificar.aspx” que tendrá el mismo aspecto que la form alta, salvo que tendrá
el botón “Modificar Producto” en vez del de “agregar Producto”, dicho botón tendrá el
siguiente código.
Nota* copie y pegue el form Alta en el Solución y le cambie el nombre de Modificar por lo
cual aparece como class Alta al comienzo del codigo.
Programacion de Apliciones Distribuidas
Borrar
En nuestra form Default.aspx agregamos un textBox y un botón “Borrar Producto”
El cual le generamos un evento haciendo doble clic en él, el cual contendrá el siguiente
código
Programacion de Apliciones Distribuidas
lo que borrara el registro con el id_producto que sea igual a que ingresamos.
Consulta
Agregamos a Default.aspx las siguientes modificaciones
El botón “consulta” tendrá un evento haciendo doble clic en él, el cual contendrá el siguiente
código
Programacion de Apliciones Distribuidas
el cual devolverá los valores del producto consultado en labels de la form Default.aspx.
7 - Creación de aplicación de consola que utilice el archivo de base de
datos local creado en el punto 3, y realice ABMC sobre la tabla de Cliente
utilizando DataSets No Tipados. (Autores: Carlos Brizuela ).
8 - Creación de aplicación de Ventanas que utilice el archivo de base de
datos local creado en el punto 3, y realice ABMC sobre la tabla de Cliente
utilizando DataSets Tipados. (Autores: Julio Rueda - Yohana Paez ).
CamStudio: (Flores Zarate Mariano - Duarte Ernesto).
“ABMC en la tabla de Cliente utilizando DataSets Tipados”
- En primer lugar creamos un nueva solución en Visual Studio, que contendrá dos
proyectos: uno que llamaremos “PUNTO8”, será el que contenga nuestros forms y la BD
creada en el punto 3 de este práctico, el proyecto llamado CAD (Capa de Acceso a Datos)
tendrá una clase CAD, por cada tabla que forme parte de nuestro DATASET, y en cada una
de estas clases definiremos los métodos para manipular nuestras tablas. Pasamos a
detallar los pasos para la resolución de este punto.
2. Dentro de la misma solución, crear una biblioteca de clases, a la que llamaremos CAD
(capa de acceso a datos).
Programacion de Apliciones Distribuidas
4. Dentro del proyecto CAD, crear un nuevo elemento, lo que haremos en este punto es
crear el DATASET.
5. En el explorador de servidores, despliega las tablas que contiene la BD, arrastra las
tablas que quieras que formen parte de tu DATASET al archivo de extensión .xsd (funciona
como un editor gráfico de nuestro dataset), de esta manera acotamos las tablas sobre las
que se trabajara. En nuestro caso solo arrastramos la tabla “Clientes”.
Programacion de Apliciones Distribuidas
- Podemos ver que la tabla cliente se generó con un sector llamado ew, este permite
manipular la tabla, en el podemos ver definidos ya unos métodos, que son sentencias SQL
para operar sobre la tabla, muchas de estas operaciones ya están definidas, pero también
podemos agregar nuevas consultas ajustándose a nuestras necesidades.
6. Si observamos nuestro proyecto CAD, veremos que tiene una clase CAD.cs creada por
defecto. Tomando esta clase, cambiamos su nombre por CADCliente.cs, desde aquí
llamaremos a los métodos definidos en nuestro tableAdapter.
7. Lo siguiente será asociar el proyecto CAD, a nuestro proyecto PUNTO8 donde están los
forms y la BD. Para poder hacerlo, en nuestro explorador de soluciones nos ubicamos en la
opción REFERENCIAS y haciendo clic derecho elegimos “Agregar referencias”.
Programacion de Apliciones Distribuidas
8. Dentro del proyecto “PUNTO8” encontramos un form1, creado por defecto, este nos
servirá para preparar la interfaz, a través de la cual el usuario podrá interactuar con el
DATASET, que será el encargado de operar sobre la BD física. Para poder responder a
operaciones básicas como son las altas, bajas y modificaciones, agregamos al windows
forms, un par de controles.
- Luego agregamos labels y textfields, que nos servirán para insertar nuevos clientes, o
modificarlos. También nuestro form1 presenta botones : AGREGAR, BORRAR,
MODIFICAR, cada uno de los cuales tiene un evento click asociado definido en FORM1.cs,
que lo que hará es tomar los datos del form1 y llamar a los métodos que se encuentran
definidos en la capa de acceso de datos.
- Para poder relacionar nuestro DATAGRIDVIEW con nuestra tabla “Cliente”, hacemos clic
sobre la fecha ubicada en la parte superior derecha del GRID, y buscamos en “Elegir origen
de datos”, nuestra tabla.
Programacion de Apliciones Distribuidas
ALTA, BAJA Y MODIFICACIÓN:
- Nuestro form está listo, pero para agregarle funcionalidad solo tenemos que agregar unas
líneas de código.
ALTA:
1. Hacemos doble clic sobre el botón “AGREGAR”, esto creará un método asociado al
mismo.
“button1” es el nombre del botón “AGREGAR”, dentro del método agregamos dos líneas de
código. La primera línea llama al método “InsertarCliente” , para esto primero hace
Programacion de Apliciones Distribuidas
- Esto hace referencia al objeto “adapter” que contiene métodos, que en realidad son
consultas SQL, que están definidas ya por defecto, por ejemplo Insert.
- Además existen definidas por defecto consultas “Delete”y “Update”. Una de las fortalezas
de los DATASET, es que nos permiten definir nuestras propias consultas personalizadas. Lo
que veremos más adelante para el caso de Delete y Update.
- Simplemente con esto, ya podremos realizar altas sobre la tabla cliente desde nuestro
form.
BAJA:
1.Hacemos doble clic sobre el botón “BORRAR”, esto creará un método asociado al mismo.
- Podemos ver que el método que llamamos del tableadapterCliente, no es el definido por
defecto “Delete”, sino uno creado por nosotros. Para hacerlo debemos ir a nuestro DataSet,
Programacion de Apliciones Distribuidas
- Como nosotros ya tenemos la consulta creada se puede ver en la imagen “DeleteQuery” y
“Update Query”. Pero para lograr eso en la opción “Agregar Consulta” hicimos lo siguiente
Programacion de Apliciones Distribuidas
- Lo resaltado en azul se crea por defecto, ahora podemos manipular estas sentencias
SQL, para obtener la consulta deseada, en nuestro caso lo reducimos a esto:
- Que se lee como, “borrar cliente cuando el id_cliente (atributo de la tabla) sea igual al
@Original_id_cliente(dato que pasamos por parámetro)”.
- Lo siguiente que nos pedirá será un nombre para nuestro procedimiento, esto es
importante recordar, ya se con ese nombre lo llamaremos desde CADCliente.cs.
Programacion de Apliciones Distribuidas
- Recordemos que “DeleteQuery1” solo fue agregado a modo de prueba, el que usamos en
nuestro proyecto es “DeleteQuery”
MODIFICACIÓN:
1. Al hacer doble clic en el botón “MODIFICAR” se generará lo siguiente:
Programacion de Apliciones Distribuidas
“button3” es el nombre de nuestro botón modificar, el código toma el valor del id_cliente, por
lo cual es importante seleccionar dicha celda antes de dar clic sobre el botón
“MODIFICAR”.
Llama al método ModificarCliente definido en la capa de acceso a datos.
en este caso el método llamará al proceso UpdateQuery que modificará el registro con los
nuevos datos ingresados, siempre que el id almacenado en la variable índice coincida con
uno existente en la tabla
- Para crear este procedimiento seguimos los mismos pasos que en el caso de
“DeleteQuery”.
- Este es el código SQL del procedimiento “UpdateQuery”
- Con esto ya tenemos nuestro windows forms con dataset tipados. También queremos
agregar que si la BD se encuentra fuera de Visual Studio se puede conectar con el servidor,
y crear dataset con tablas de la BD, y luego seguir los mismos pasos aquí especificados.
9 - Creación de aplicación Web Forms que utilice el archivo de base de
datos local creado en el punto 3, y realice ABMC sobre la tabla de
Producto utilizando DataSets Tipados. (Autores: Páez Paz, Matías).TP2
CamStudio: Apaza Leonardo
Y se completa la tabla haciendo una consulta SQL con el código del punto 3.
Programacion de Apliciones Distribuidas
Para el alta, llenamos el formulario, en este caso con una tabla que contiene el texto, los
TextBox y el Button, hacemos doble click en el Button para que se genere el código del
evento click, en el que usamos el siguiente código para realizar el alta:
var adaptador = new DataSet1TableAdapters.productoTableAdapter();
adaptador.Insert(TextBox1.Text,double.Parse(TextBox2.Text),int.Parse(TextBox
3.Text),int.Parse(TextBox4.Text));
DataSet1 es el nombre del DataSet usado, TextBox1, 2, 3 y 4 son los TextBox que se
ingresan el nombre, precio, stock y categoría respectivamente.
Para la baja y modificación se puede usar un elemento GridView, que se encuentra en la
parte de Datos del Cuadro de herramientas. Se puede asignarle el DataSet como origen de
datos directamente desde el diseño:
Programacion de Apliciones Distribuidas
10 - Creación de aplicacion Windows Form que utilice el archivo de base
de datos local creado en el punto 3 y que permita realizar realizar una
venta. (Autores: Veliz Juan Agustin, Sale Carlos Gabriel ). (CamStudio:
Diaz Falcao Alejandra, Gutiérrez Andrea)
Creación del proyecto con windows form
Lo primero que hay que hacer al abrir Visual Studio es ir a la pestaña Archivo y seleccionar
Nuevo. Se abrira un menu desplegable donde elegiremos la opción Proyecto…
A partir de ahí nos saldrán una serie de opciones, de las cuales a la izquierda elegiremos
Visual C# y a la derecha Aplicación de Windows Forms. Debajo, al lado de la etiqueta
nombre, podemos nombrar nuestro proyecto como queramos. Hacemos click en aceptar.
Programacion de Apliciones Distribuidas
Con nuestro proyecto creado vamos a ver un Windows Form vacio, al cual le vamos a
agregar elementos arrastrandolos del cuadro de herramientas que aparece a la izquierda.
Luego de agregarle los elementos nos debería quedar un Windows form asi:
Programacion de Apliciones Distribuidas
Creación de la clase Conexion
Hacemos click derecho en nuestro proyecto, dentro del explorador de soluciones y elegimos
la opción Agregar… y luego Clase…
La clase conexion posee dos atributos, un SqlConnection que será el string de la conexión a
la base de datos y un SqlCommand que posee la cadena de conexión y recibe los querys
para ejecutarlos luego.
class Conexion
{
SqlConnection con = new SqlConnection("Data
Source=(LocalDB)\\MSSQLLocalDB;"
+
"AttachDbFilename=|DataDirectory|\\Venta.mdf;Integrated
Security=True");
SqlCommand sql = new SqlCommand();
public Conexion()
{
sql.Connection = con;
}
Como podemos ver es dentro del constructor donde le asignamos al SqlCommand la
cadena de conexión.
Programacion de Apliciones Distribuidas
Conexion tambien posee 4 métodos que son los que van a ejecutar distintos tipos de querys
y uno para cerrar la conexión.
con.Open();
sql.CommandText = query;
try
{
SqlDataReader resultado = sql.ExecuteReader();
return resultado;
}catch(SqlException)
{
MessageBox.Show("Error en la operacion "+query);
return null;
}
}
sql.CommandText = query;
try
{
string idFactura = sql.ExecuteScalar().ToString();
return idFactura;
}catch(SqlException)
{
MessageBox.Show("Error en la operacion "+query);
return null;
}
}
Clase Controlador
Es la clase que recibe y maneja todos los eventos del Form principal. Posee 3 atributos
estáticos que son el propio form, la conexión, y una colección de detalles.
class Controlador
{
static Ventana v = new Ventana();
static Conexion con = new Conexion();
static List<Detalle> detalles = new List<Detalle>();
}
}
Clase Detalle
Programacion de Apliciones Distribuidas
Esta clase se define como una auxiliar, Detalle es parte del modelo de BD, y se la usa para
armar la colección de Detalles de la clase controladora y luego poder agregar varios detalles
relacionados a una sola factura en la BD.
class Detalle
{
private int id_producto;
private int cantidad;
private double precio;
12 - Creación de procedimientos almacenados en la base de datos del
punto 3 para realizar las operaciones de Alta, Baja y Modificación de la
tabla de Cliente, y crear una aplicación ADO.NET que utilize dichos
procedimientos almacenados. (Autores: Barrientos Gabriel - Pasteris
Lucas). CamStudio: Montero Mauricio Alejandro
p
Creacion de Procedimientos Almacenados en Base de Datos con aplicacion
ADO.NET
Using System.Data.SqlClient;
En nuestro caso, una vez creado el proyecto, primero deberíamos cargar la tabla cliente
realizada en el punto 3, o bien crearla nuevamente siguiendo los pasos declarados en el
mismo.
Para cargarla de nuestro directorio, tenemos que hacer click derecho en nuestro proyecto
Una vez cargada nuestra DB Empresa.mdf, hacemos click derecho en ella en el explorador
de soluciones de nuestro proyecto y se nos abrirá el explorador de servidores en donde
muestra todo lo que contiene nuestra DB.
Se nos abrirá una pestaña en donde podemos realizar una consulta SQL, pero en este caso
viene predefinida con la sintaxis para la creación de un procedimiento almacenado.
por ejemplo SELECT @param1, @param2.. aquí utilizaremos los parámetros que recibe el
procedimiento.
Al fin y al cabo, es una sintaxis parecida a la de un método, salvo con la excepción que sirve
para consultas SQL.
Una vez que entendimos esto, crearemos procedimientos almacenados para Alta, Baja y
Modificaciones de nuestra tabla cliente.
Para realizar el alta de un cliente, tenemos que declarar los parámetros que recibirá el
procedimiento que en este caso son los atributos del cliente, declarados con un @ seguidos
por el tipo.
La sintaxis BEGIN - consulta - END, es opcional, sirve para estructurar un poco más el
procedimiento, al fin y al cabo se podría obviar ingresando solamente la consulta.
En este caso el parámetro que recibimos para realizar la eliminación es el ID del cliente.
Luego en el margen superior derecho de nuestro Grid hacemos click y se nos abrirán las
opciones del mismo.
Elegimos nuestro origen de dato, en este caso no nos aparece ninguno porque todavia no
creamos el origen de datos para este grid.
Procedemos a crearlo
Hacemos click en agregar origen de datos y se nos abrirá el Asistente para la configuración
del origen de datos
Programacion de Apliciones Distribuidas
Aquí el asistente nos pedirá que agreguemos nuestra conexión. En el caso de que no les
aparezca ya la conexión de la DB, hacemos click en Nueva Conexión.
Luego click en examinar y buscamos nuestra DB Empresa.mdf.
Programacion de Apliciones Distribuidas
Y listo ahora iniciemos la aplicación se nos cargarán los clientes que tenemos en nuestra
DB en el DataGridView.
Ahora vamos a utilizar los procedimientos almacenados.
Agregaremos botones para un Nuevo Cliente, Modificar y Eliminar.
Además crearemos otro WinForm para la hora de agregar un cliente o modificar sus datos,
es decir, hacemos click en Nuevo o bien seleccionamos un cliente (fila) de la tabla y se nos
abrirá el mismo form para modificar sus datos.
El evento del boton agregar estará referenciado para el Insert de un nuevo cliente, en este
caso el procedimiento almacenado altaCliente. Para su utilizacion procedemos a crear un
método o bien en el mismo evento del boton, haciendo doble click en el mismo.
Los pasos son los mismo para una consulta SQL que para un procedimiento almacenado.
Con la excepcion que a la hora de declarar la consulta, la sintaxis para la utilizacion del
procedimiento es la siguiente
Se nos abrirá la ventana Datos Clientes con los TextField cargados con sus datos. De tal
manera los podemos modificar y hacemos click en el botón Guardar.
Programacion de Apliciones Distribuidas
También hace referencia a un método que se conecta con la DB, que se encuentra en la
clase principal.
Método guardarModificacionCliente
Aquí vemos como sería la modificación del cliente de forma normal (en comentarios) y la
modificación del cliente utilizando el procedimiento modificacionCliente.
Ahora, para la baja de un cliente, podemos seleccionar una fila y hacemos click en el botón
eliminar.
Este método nos muestra una ventana de alerta de que si estamos seguros de eliminar,
como una confirmación.
13 - Creación de triggers en la base de datos del punto 3 que auditen las
operaciones de eliminación de la tabla de Clientes. (Autores: ).
Programacion de Apliciones Distribuidas
14 - Creación de un web service que permita obtener los datos de un
clientes en particular, listado de clientes, datos de un producto y listado
de productos. (Autores: Apaza Leonardo ).(CamStudio-Autores: Cano José
Manuel - Molina Luis )
De una manera más clara se podría decir que un web service es una función que diferentes
servicios o equipos utilizan; es decir, solo se envían parámetros al servidor (lugar donde
Ahora vamos a crear un web service en visual studio 2015 para obtener:
· Listado de clientes
· Listado de productos
Abrimos nuestro visual studio 2015 y creamos un nuevo proyecto del tipo Web->Aplicación
Nos creará un proyecto vacío, luego agregamos un nuevo elemento haciendo click derecho
en nuestro proyecto y agregamos lo siguiente:
Luego nos aseguramos que tenemos nuestra base de datos de los ejemplos anteriores en
nuestro explorador de servidores ->Conexiones de datos -> bdfacturacion.mdf
Luego en invocar
Si todo salio bien nos devuelve un archivo xml con la información de la tabla.
Programacion de Apliciones Distribuidas
obtenerCliente
listadoProducto
Programacion de Apliciones Distribuidas
obtenerProducto
Programacion de Apliciones Distribuidas
Programacion de Apliciones Distribuidas
15 - Creación de un cliente de web service que utilice los servicios
creados en el punto 14. (Autores: ).
16 - Validación de datos de entrada en aplicaciones Windows y Web
(valor número, correo electrónico, CUIT/CUIL, fecha). (Autores: Montero
Mauricio Alejandro, Ibarra César Augusto) (TP2: Páez Paz, Matías José).
Si desea exigir que los usuarios especifiquen datos en un formato bien definido, como un
número de teléfono o un número de serie, puede llevarlo a cabo rápidamente y con una mínima
cantidad de código mediante el control MaskedTextBox. Una máscara es una cadena formada
por caracteres de un lenguaje de enmascaramiento que especifica qué caracteres se pueden
especificar en una posición determinada del cuadro de texto. El control muestra un conjunto de
indicadores al usuario. Si el usuario especifica una entrada incorrecta, por ejemplo, escribe una
letra cuando se requiere un dígito, el control rechazará automáticamente la entrada.
Para obtener un resumen de los caracteres que la propiedad Mask admite, vea la sección
Comentarios de la propiedad Mask.
Código en C#:
1. En el controlador de eventos Load del formulario, asigne un objeto Type que representa
el tipo DateTime en la propiedad ValidatingType del control MaskedTextBox:
C#
public void maskedTextBox1_TypeValidationCompleted(object sender, TypeValidationEventArgs
e)
{
if (!e.IsValidInput)
{
toolTip1.ToolTipTitle = "Invalid Date Value";
toolTip1.Show("We're sorry, but the value you entered is not a valid date. Please change the
value.", maskedTextBox1, 5000);
e.Cancel = true;
}
}
17 - Creación de aplicación con una base de datos similar a la del punto
3, utilizando Entity Framework - Code First. (Autor: Mattivi Alfredo
).camstudio(vanesa celiz)
1. Paso:
Necesitará tener instalados Visual Studio
Si usa Visual Studio 2013, también debe tener NUGET instalado.
2. Para mantener la simplicidad, vamos a generar una aplicación de consola básica
que use Code First para el acceso a los datos.
Vamos a definir un modelo muy sencillo con clases. Solo vamos a definirlas en el archivo
Program.cs
4) Ahora es el momento de definir un contexto derivado que representa una sesión con la
base de datos, lo que nos permite consultar y guardar los datos. Definimos un contexto que
deriva de System.Data.Entity.DbContext y expone un DbSet<TEntity> con tipo para cada
clase en nuestro modelo.
Ahora vamos a comenzar a usar tipos de Entity Framework de modo que necesitamos
agregar el paquete de EntityFramework NuGet.
Proyecto –> Administrar paquetes de NuGet
Nota: si no dispone de la opción Administrar paquetes de NuGet, debe instalar la versión
}
}
}
Las clases
}
public class BloggingContext : DbContext
{
public DbSet<Cliente> Clientes { get; set; }
public DbSet<Factura> Facturas { get; set; }
public DbSet<Detalle> Detalles { get; set; }
public DbSet<Producto> Productos { get; set; }
public DbSet<Categoria> Categorias { get; set; }
}
Programacion de Apliciones Distribuidas
18 - Creación de aplicación Web utilizando la base de datos del punto 3,
con AMBC de la tabla Cliente y Producto utilizando el Framework MVC.
(Autores: ).
Programacion de Apliciones Distribuidas
19 - Creación de un archivo de base de datos local, con las tablas
necesarias para un sistema de préstamo de alquileres de películas en un
videoclub. Agregar ejemplos de instrucciones sql de select/join, insert,
update y delete (Autores:Molina Reinoso Luis, Jose Cano ).
Modelo de Clases
-Procedimiento Mostrar
create proc spMostrar_Empleado
as
select * from Empleado
order by Id desc
go
@ApyNom varchar(50),
@Turno varchar(10)
as
insert into Empleado(ApyNom,Turno)
values (@ApyNom,@Turno)
go
//ingreso
--Procedimiento Mostrar
alter proc spMostrar_Ingreso_Pelicula
as
SELECT top 100 i.Id,i.Id_Empleado,e.ApyNom as Empleado, i.Fecha, i.Estado,
sum(d.Precio_Compra * d.Stock_Inicial)as Total
from Detalle_Ingreso_Pelicula d inner join Ingreso_Pelicula i
on d.Id_Ingreso_Pelicula= i.Id
inner join Empleado e
on i.Id_Empleado= e.Id
group by
i.Id,i.Id_Empleado, e.ApyNom , i.Fecha, i.Estado
order by i.Id desc
go
@textobuscar2 varchar(20)
as
SELECT i.Id,i.Id_Empleado,e.ApyNom as Empleado, i.Fecha, i.Estado,
sum(d.Precio_Compra * d.Stock_Inicial)
from Detalle_Ingreso_Pelicula d inner join Ingreso_Pelicula i
on d.Id_Ingreso_Pelicula= i.Id
inner join Empleado e
on i.Id_Empleado= e.Id
group by
i.Id,i.Id_Empleado, e.ApyNom ,
i.Fecha, i.Estado
having i.Fecha >=@textobuscar and i.Fecha <= @textobuscar2
go
--Ingresar un Ingreso--
alter proc spInsertar_Ingreso_Pelicula
@Id int= null output,
@Id_Empleado int,
@Fecha date,
@Estado varchar(7)
as
insert into Ingreso_Pelicula(Id_Empleado,Fecha,Estado)
values(@Id_Empleado,@Fecha,@Estado)
--obtener el codigo autogenerado--
Clase conexion
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
namespace CapDatos
{
public class DGenero
{
//declaracion de Variables
Programacion de Apliciones Distribuidas
set
{
vId = value;
}
}
set
{
vDescripcion = value;
}
}
set
{
vtextobuscar = value;
}
}
#endregion
Programacion de Apliciones Distribuidas
public DGenero()
{}
#region Metodos
//Insertar
try
{
SqlConex.ConnectionString = Conexion.Conex;
SqlConex.Open();
//comando
SqlCommand SqlCmd = new SqlCommand();//inicio los comandos
SqlCmd.Connection = SqlConex; //conexion con la bases
SqlCmd.CommandText = "spInsertar_Genero";//nombre del sp
SqlCmd.CommandType = CommandType.StoredProcedure;//tipo de comando
//parametro
SqlParameter ParId = new SqlParameter();
ParId.ParameterName = "@Id";//nombre
ParId.SqlDbType = SqlDbType.Int;//tipo
ParId.Direction = ParameterDirection.Output;//variable de salida
SqlCmd.Parameters.Add(ParId);//agregar
resp = ex.Message;
finally
{
if (SqlConex.State== ConnectionState.Open)
{
SqlConex.Close();
}
}
return resp;
}
//Editar
public string Editar (DGenero Genero)
{
string resp = "";
SqlConnection SqlConex = new SqlConnection();
try
{
SqlConex.ConnectionString = Conexion.Conex;
SqlConex.Open();
{
resp = ex.Message;
finally
{
if (SqlConex.State == ConnectionState.Open)
{
SqlConex.Close();
}
}
return resp;
}
//Eliminar
public string Eliminar(DGenero Genero)
{
string resp = "";
SqlConnection SqlConex = new SqlConnection();
try
{
SqlConex.ConnectionString = Conexion.Conex;
SqlConex.Open();
}
Programacion de Apliciones Distribuidas
finally
{
if (SqlConex.State == ConnectionState.Open)
{
SqlConex.Close();
}
}
return resp;
//Mostrar tablas
public DataTable Mostrar()
{
DataTable DtbResp = new DataTable("Genero");
SqlConnection SqlConex = new SqlConnection();
try
{
SqlConex.ConnectionString = Conexion.Conex;
SqlCommand SqlCmd = new SqlCommand();
SqlCmd.Connection = SqlConex;
SqlCmd.CommandText = "spMostrar_Genero";
SqlCmd.CommandType = CommandType.StoredProcedure;
DtbResp = null;
}
return DtbResp;
DtbResp = null;
}
return DtbResp;
#endregion
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
namespace CapDatos
{
public class DDetalle_Alquiler
Programacion de Apliciones Distribuidas
{
private int vId;
private int vId_Alquiler;
private int vId_Detalle_Ingreso;
private int vCantidad;
private DateTime vFecha_Alq;
private DateTime vFecha_Dev;
private decimal vPrecioVenta;
private decimal vDescuento;
set
{
vId = value;
}
}
set
{
vId_Alquiler = value;
}
}
set
{
Programacion de Apliciones Distribuidas
vId_Detalle_Ingreso = value;
}
}
set
{
vCantidad = value;
}
}
set
{
vFecha_Alq = value;
}
}
set
{
vFecha_Dev = value;
}
}
{
return vPrecioVenta;
}
set
{
vPrecioVenta = value;
}
}
set
{
vDescuento = value;
}
}
#endregion
public DDetalle_Alquiler()
{}
try
{
//comando
SqlCommand SqlCmd = new SqlCommand();//inicio los comandos
SqlCmd.Connection = SqlConex; //conexion con la bases
SqlCmd.Transaction = SqlTran; //establecemo la transaccion
SqlCmd.CommandText = "spInsertar_Detalle_Alquiler";//nombre del sp
SqlCmd.CommandType = CommandType.StoredProcedure;//tipo de comando
//parametro
SqlParameter ParId = new SqlParameter();
ParId.ParameterName = "@Id";//nombre
ParId.SqlDbType = SqlDbType.Int;//tipo
ParId.Direction = ParameterDirection.Output;//variable de salida
SqlCmd.Parameters.Add(ParId);//agregar
ParFecha_Dev.SqlDbType = SqlDbType.Date;
ParFecha_Dev.Value = Detalle_Alquiler.VFecha_Dev;
SqlCmd.Parameters.Add(ParFecha_Dev);
return resp;
}
}
}
Métodos Especiales
SqlConex.ConnectionString = Conexion.Conex;
SqlCommand SqlCmd = new SqlCommand();
SqlCmd.Connection = SqlConex;
SqlCmd.CommandText = "spBuscar_Alquiler_Fecha";
SqlCmd.CommandType = CommandType.StoredProcedure;
DtbResp = null;
}
return DtbResp;
DtbResp = null;
}
return DtbResp;
Capa Negocio
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CapDatos;
Programacion de Apliciones Distribuidas
using System.Data;
namespace CapNegocios
{
public class NGenero
{
//LLAMAMOS A LOS METODOS QUE SE ENCUENTRAN EN LA CAPA DATOS
public static string Insertar(string Descripcion)
{
DGenero Gene = new DGenero();
Gene.VDescripcion = Descripcion;
return Gene.Insertar(Gene);
}
Programacion de Apliciones Distribuidas
}
}
//los detalles
List<DDetalle_Ingreso> Detalles = new List<DDetalle_Ingreso>();
foreach (DataRow row in dtDetalle.Rows)
{
DDetalle_Ingreso Det = new DDetalle_Ingreso();
Det.VId_Pelicula = Convert.ToInt32(row["Id_Pelicula"].ToString());
Det.VStock_Inicial =Convert.ToInt32( row["Stock_Inicial"].ToString());
Det.VStock_Actual =Convert.ToInt32( row["Stock_Inicial"].ToString());//al princcipo
siempre igual al stock incial
Det.VPrecio_Compra= Convert.ToDecimal(row["Precio_Compra"].ToString());
Det.VPrecio_Venta = Convert.ToDecimal(row["Precio_Venta"].ToString());
Detalles.Add(Det);
Capa Presentacion
Programacion de Apliciones Distribuidas
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 CapNegocios;
using CapDatos;
using CapPresentacion;
namespace CapPresentacion
{
public partial class PPelicula : Form
{
//Declarion de variables auxiliares
private bool IsNuevo = false;
private bool IsModificar = false;
int aux = 0;
int aux2 = 0;
public PPelicula()
{
InitializeComponent();
this.ttMensaje.SetToolTip(this.txtNombre, "Ingrese el Nombre de la Pelicula");
this.ttMensaje.SetToolTip(this.cmbGenero, "Seleccione el Genero");
Programacion de Apliciones Distribuidas
//Metodos
//Limpiar
private void Limpiar()
{
this.txtNombre.Text = string.Empty;
this.cmbGenero.SelectedIndex= 0;
}
this.Habilitar(false);
this.btnNuevo.Enabled = true;
this.btnGuardar.Enabled = false;
this.btnModificar.Enabled = true;
this.btnCancelar.Enabled = false;
this.cmbGenero.Enabled = false;
this.btnGenero.Enabled = false;
}
/// <summary>
/// Metodos Funcionales
/// </summary>
///
//Mostrar Columnas
private void Mostrar()
{
this.dgvGrilla.DataSource = NPelicula.Mostrar();
this.OcultarColumnas();
lblTotal.Text = "Total Registros: " + Convert.ToString(dgvGrilla.Rows.Count);
}
}
else
{
if (this.IsNuevo)
{
Resp = NPelicula.Insertar(this.txtNombre.Text.ToUpper().TrimStart(),
Convert.ToInt32(this.cmbGenero.SelectedValue));
}
else
{
NuevaPelicula.VId = aux;
NuevaPelicula.VId_Genero = aux2;
Resp = NPelicula.Editar(NuevaPelicula.VId,
this.txtNombre.Text.ToUpper().TrimStart(),
Convert.ToInt32(this.cmbGenero.SelectedValue));
}
if (Resp.Equals("Ok"))
{
if (this.IsNuevo)
{
this.MensajeOK("Se Cargo el registro Correctamente.");
}
else
{
this.MensajeOK("Se Modifico el registro Correctamente.");
}
}
else
{
this.MensajeError(Resp);
}
IsNuevo = false;
IsModificar = false;
Botones();
Limpiar();
Mostrar();
Programacion de Apliciones Distribuidas
this.txtNombre.Text = "";
this.cmbGenero.SelectedIndex = 0;
this.txtNombre.Focus();
}
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message + Ex.StackTrace);
}
}
//Eliminar Registro
private void btnEliminar_Click(object sender, EventArgs e)
{
try
{
DialogResult opcion;
opcion = MessageBox.Show("¿Desea Eliminar Registro?", "Video Club",
MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (opcion == DialogResult.OK)
{
string Codigo;
string Resp = "";
if (Resp.Equals("Ok"))
{
}
else
{
this.MensajeError(Resp);
}
}
}
this.Mostrar();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
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 CapNegocios;
using CapDatos;
namespace CapPresentacion
{
public partial class PAlquiler : Form
{
//Variables
public PAlquiler()
{
InitializeComponent();
this.txtNombre.ReadOnly = true;
this.txtSocio.ReadOnly = true;
this.txtPrecioCom.ReadOnly = true;
this.txtStockActual.ReadOnly = true;
Programacion de Apliciones Distribuidas
/// <summary>
/// Metodos Funcionales
/// </summary>
private void Limpiar()
{
this.txtSocio.Text = string.Empty;
this.cmbEmpleado.SelectedIndex = 0;
this.lblTotalPagar.Text = "0.0";
this.crearTabla();
}
this.txtStockActual.ReadOnly = !valor;
this.txtPrecioCom.ReadOnly = !valor;
this.txtPrecioVen.ReadOnly = !valor;
this.btnPelicula.Enabled = valor;
this.btnEmpleado.Enabled = valor;
this.btnSocio.Enabled = valor;
this.btnAgregar.Enabled = valor;
this.btnQuitar.Enabled = valor;
this.btnGuardar.Enabled = valor;
this.btnCancelar.Enabled = valor;
}
//BOTONES
private void Botones()
{
if (this.IsNuevo || this.IsModificar)
{
this.Habilitar(true);
this.btnNuevo.Enabled = false;
this.btnGuardar.Enabled = true;
this.btnCancelar.Enabled = true;
this.cmbEmpleado.Enabled = true;
this.btnEmpleado.Enabled = true;
this.btnPelicula.Enabled = true;
this.btnAgregar.Enabled = true;
this.btnQuitar.Enabled = true;
this.btnSocio.Enabled = true;
this.btnSocio.Enabled = true;
}
else
{
this.Habilitar(false);
this.btnNuevo.Enabled = true;
this.btnGuardar.Enabled = false;
this.btnCancelar.Enabled = false;
this.cmbEmpleado.Enabled = false;
this.btnEmpleado.Enabled = false;
this.btnPelicula.Enabled = false;
this.btnAgregar.Enabled = false;
this.btnQuitar.Enabled = false;
this.btnSocio.Enabled = false;
}
}
Programacion de Apliciones Distribuidas
this.dtDetalle.Columns.Add("Fecha_Dev",
System.Type.GetType("System.DateTime"));
this.dtDetalle.Columns.Add("Cantidad", System.Type.GetType("System.Int32"));
this.dtDetalle.Columns.Add("PrecioVenta",
System.Type.GetType("System.Decimal"));
this.dtDetalle.Columns.Add("Descuento", System.Type.GetType("System.Decimal"));
this.dtDetalle.Columns.Add("Stock_Actual", System.Type.GetType("System.Int32"));
this.dtDetalle.Columns.Add("SubTotal", System.Type.GetType("System.Decimal"));
//Relacionamos nuestro datagridview con nuestro datatable
this.dgvDetalle.DataSource = this.dtDetalle;
//EVENTOS
cmbEmpleado.DataSource = NEmpleado.Mostrar();
cmbEmpleado.ValueMember = "Id";
cmbEmpleado.DisplayMember = "ApyNom";
}
try
{
DialogResult Opcion;
Opcion = MessageBox.Show("Realmente Desea Elimnar los registros", "Sistema
de Ventas", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (Opcion == DialogResult.OK)
{
string Codigo;
string Rpta = "";
if (Rpta.Equals("OK"))
{
this.MensajeOK("Se Elimino Correctamente el registro");
}
else
{
this.MensajeError(Rpta);
}
}
}
this.Mostrar();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + ex.StackTrace);
}
}
Programacion de Apliciones Distribuidas
this.Habilitar(true);
}
if (this.cmbEmpleado.Text == string.Empty
|| this.txtSocio.Text== string.Empty)
{
MensajeError("Falta Ingresar algunos valores serán remarcados");
}
else
{
if (this.IsNuevo)
{
Resp =
NAlquiler.Insertar(Convert.ToInt32(this.cmbEmpleado.SelectedValue),vId_Socio,
dtpFecha.Value,
"EMITIDO", dtDetalle);
}
if (Resp.Equals("Ok"))
{
if (this.IsNuevo)
{
this.MensajeOK("Se Cargo el registro Correctamente.");
Programacion de Apliciones Distribuidas
}
else
{
this.MensajeOK("Se Modifico el registro Correctamente.");
}
}
else
{
this.MensajeError(Resp);
}
IsNuevo = false;
IsModificar = false;
Botones();
Limpiar();
Mostrar();
this.txtNombre.Text = "";
this.cmbEmpleado.SelectedIndex = 0;
this.txtNombre.Focus();
}
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message + Ex.StackTrace);
}
}
row["SubTotal"] = subTotal;
this.dtDetalle.Rows.Add(row);
this.LimpiarDetalle();
}
else
{
MensajeError("No hay stock suficiente.");
}
}
}
MessageBox.Show(ex.Message + ex.StackTrace);
Programacion de Apliciones Distribuidas
}
}
Configuración Vista
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 CapNegocios;
namespace CapPresentacion
{
public partial class PVistaSocio : Form
{
Programacion de Apliciones Distribuidas
AuxSocio_Id = Convert.ToInt32(this.dgvGrilla.CurrentRow.Cells["Id"].Value);
ApyNom = Convert.ToString(this.dgvGrilla.CurrentRow.Cells["ApyNom"].Value);
this.Hide();
}
}
}
Vista Principal
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 CapPresentacion;
namespace VideoClub
{
public partial class formPrincipal : Form
{
Programacion de Apliciones Distribuidas
public formPrincipal()
{
InitializeComponent();
}
Clase Program
Programacion de Apliciones Distribuidas
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using CapPresentacion;
namespace VideoClub
{
static class Program
{
/// <summary>
/// Punto de entrada principal para la aplicación.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new formPrincipal());
}
}
}
20 - Creación de un archivo de base de datos local, con las tablas
necesarias para un sistema de préstamo de libros en una biblioteca.
Agregar ejemplos de instrucciones sql de select/join, insert, update y
delete (Autores: Facundo Javier Gelatti, Gustavo Gabriel Mera)
(Camstudio: Reyes Jorge- Gomez Emmanuel).
Modelo Relacional
Programacion de Apliciones Distribuidas
Para crear una nueva base de datos en nuestro Proyecto
Posicionar el cursor en el proyecto, hacer click derecho, Agregar y luego Nuevo elemento
Se abrirá un cuadro de diálogo para agregar nuevos elementos al proyecto. Realizar los
siguientes pasos
1) Seleccionar desde el menú elementos, ubicado a la izquierda, “Datos”.
2) Seleccionar “Base de datos basada en servicio” en la lista de plantillas disponibles.
3) Elegir el nombre deseado para la tabla
4) Hacer click en el Botón aceptar
Programacion de Apliciones Distribuidas
Luego de crear la base de datos, se procede a crear las tablas que tendrá la misma. Para
ello posicionarse en la base de datos que agregamos al proyecto. Ubicado en el explorador
de soluciones. Hacer click derecho y luego click en abrir
.
Para agregar una nueva tabla posicionarse en “Tablas” hacer click derecho y presionar
Agregar nueva tabla
Programacion de Apliciones Distribuidas
Para cambiar el nombre a la tabla es necesario realizar una modificación en la sentencia sql
Para crear las columnas de la tabla, se debe ingresar en (1) los nombres de las columnas,
en (2) el tipo de dato y en (3) si la columna permitir valores NULL o vacio.
Programacion de Apliciones Distribuidas
Para agregar una clave foránea hacer click derecho en Claves externas que se ubica en el
panel contexto y seleccione agregar nueva clave externa.
SQL
CREATE TABLE [dbo].[Socios]
(
[Id] INT NOT NULL PRIMARY KEY IDENTITY,
[Nombre] VARCHAR(MAX) NOT NULL,
[Apellido] VARCHAR(MAX) NOT NULL,
[Dni] VARCHAR(8) NOT NULL,
[Domicilio] VARCHAR(MAX) NOT NULL,
[FechaNacimiento] DATE NOT NULL
)
CREATE TABLE [dbo].[Libros]
(
[Id] INT NOT NULL PRIMARY KEY IDENTITY,
[Isbn] VARCHAR(13) NOT NULL,
[Titulo] VARCHAR(MAX) NOT NULL
)
CREATE TABLE [dbo].[Autores]
(
[Id] INT NOT NULL PRIMARY KEY IDENTITY,
[Nombre] VARCHAR(MAX) NOT NULL,
[Apellido] VARCHAR(MAX) NOT NULL
Programacion de Apliciones Distribuidas
)
CREATE TABLE [dbo].[Autores_Libros]
(
[Id_Autor] INT NOT NULL,
[Id_Libro] INT NOT NULL,
PRIMARY KEY ([Id_Libro], [Id_Autor]),
CONSTRAINT [FK_Autor] FOREIGN KEY ([Id_Autor]) REFERENCES
[Autores]([Id]),
CONSTRAINT [FK_Libro] FOREIGN KEY ([Id_Libro]) REFERENCES
[Libros]([Id])
)
CREATE TABLE [dbo].[Ejemplares]
(
[Codigo] INT NOT NULL PRIMARY KEY,
[Id_Libro] INT NOT NULL,
CONSTRAINT [FK_Ejemplares_Libros] FOREIGN KEY ([Id_Libro])
REFERENCES [Libros]([Id])
)
CREATE TABLE [dbo].[Prestamos]
(
[Id] INT NOT NULL PRIMARY KEY IDENTITY,
[Fecha] DATETIME NOT NULL,
[Id_Socio] INT NOT NULL,
[Codigo_Ejemplar] INT NOT NULL,
[Devuelto] BIT NOT NULL,
CONSTRAINT [FK_Prestamos_Socios] FOREIGN KEY ([Id_Socio])
REFERENCES [Socios]([Id]),
CONSTRAINT [FK_Prestamos_Ejemplares] FOREIGN KEY
([Codigo_Ejemplar]) REFERENCES [Ejemplares]([Codigo])
)
INSERT INTO [dbo].[Autores] ([Nombre], [Apellido]) VALUES ('Robert
C', 'Martin')
INSERT INTO [dbo].[Autores] ([Nombre], [Apellido]) VALUES ('Martin',
'Fowler')
INSERT INTO [dbo].[Autores] ([Nombre], [Apellido]) VALUES ('Kent',
'Beck')
INSERT INTO [dbo].[Autores] ([Nombre], [Apellido]) VALUES ('Craig',
'Larman')
INSERT INTO [dbo].[Libros] ([Isbn], [Titulo]) VALUES
('9780132350884', 'Clean Code')
Programacion de Apliciones Distribuidas
INSERT INTO [dbo].[Libros] ([Isbn], [Titulo]) VALUES
('0076092046981', 'The Clean Coder')
INSERT INTO [dbo].[Libros] ([Isbn], [Titulo]) VALUES
('9780201485677', 'Refactoring')
INSERT INTO [dbo].[Libros] ([Isbn], [Titulo]) VALUES
('9788420534381', 'UML y Patrones')
INSERT INTO [dbo].[Socios] ([Nombre], [Apellido], [Dni],
[Domicilio], [FechaNacimiento]) VALUES ('Facundo Javier', 'Gelatti',
'37935919', 'Congreso 853', '1994-05-23')
INSERT INTO [dbo].[Autores_Libros] ([Id_Autor], [Id_Libro]) VALUES
(1, 1)
INSERT INTO [dbo].[Autores_Libros] ([Id_Autor], [Id_Libro]) VALUES
(1, 2)
INSERT INTO [dbo].[Autores_Libros] ([Id_Autor], [Id_Libro]) VALUES
(2, 3)
INSERT INTO [dbo].[Autores_Libros] ([Id_Autor], [Id_Libro]) VALUES
(3, 3)
INSERT INTO [dbo].[Autores_Libros] ([Id_Autor], [Id_Libro]) VALUES
(4, 4)
INSERT INTO [dbo].[Ejemplares] ([Codigo], [Id_Libro]) VALUES (1, 4)
INSERT INTO [dbo].[Ejemplares] ([Codigo], [Id_Libro]) VALUES (2, 4)
INSERT INTO [dbo].[Ejemplares] ([Codigo], [Id_Libro]) VALUES (3, 4)
INSERT INTO [dbo].[Ejemplares] ([Codigo], [Id_Libro]) VALUES (4, 4)
INSERT INTO [dbo].[Ejemplares] ([Codigo], [Id_Libro]) VALUES (5, 3)
INSERT INTO [dbo].[Prestamos] ([Fecha], [Id_Socio],
[Codigo_Ejemplar], [Devuelto]) VALUES (1, '2015-08-29 22:45:00', 1,
1, 0)
Listado de préstamos
SELECT
CAST(p.Fecha AS date) AS 'Fecha',
s.Dni AS 'DNI',
s.Nombre + ' ' + s.Apellido AS 'Socio',
e.Codigo AS 'Código',
l.Titulo AS 'Libro',
CASE WHEN p.Devuelto = 1
THEN
'Devuelto'
Programacion de Apliciones Distribuidas
ELSE
'Pendiente'
END
AS 'Estado'
FROM Prestamos p
JOIN Socios s
ON p.Id_Socio = s.Id
JOIN Ejemplares e
ON p.Codigo_Ejemplar = e.Codigo
JOIN Libros l
ON e.Id_Libro = l.Id
ORDER BY p.Fecha;
Listado de ejemplares con estado
SELECT
e.Codigo,
l.Titulo,
CASE WHEN EXISTS (SELECT p.Devuelto FROM Prestamos p WHERE
p.Codigo_Ejemplar = e.Codigo AND p.Devuelto = 0)
THEN
'Pendiente'
ELSE
'Devuelto'
END
AS 'Estado'
FROM Ejemplares e
JOIN Libros l
ON e.Id_Libro = l.Id
ORDER BY Estado DESC;
Listado de socios con estado
SELECT
s.*,
CASE WHEN EXISTS (SELECT p.Devuelto FROM Prestamos p WHERE
p.Id_Socio = s.Id AND p.Devuelto = 0)
THEN
'SI'
ELSE
'NO'
END
AS 'Debe algún libro?'
FROM Socios s;
Programacion de Apliciones Distribuidas
Listado de libros con cantidad de ejemplares
SELECT l.Isbn, l.Titulo, COUNT(e.Codigo) AS 'Cantidad de Ejemplares'
FROM Libros l
LEFT JOIN Ejemplares e
ON l.Id = e.Id_Libro
GROUP BY l.Id, l.Isbn, l.Titulo
ORDER BY [Cantidad de Ejemplares] DESC;
21 - Creación de un archivo de base de datos local, con las tablas
necesarias para un sistema de un restaurante. Agregar ejemplos de
instrucciones sql de select/join, insert, update y delete (Autores: Grosse
Iván, Cerutti De la Cruz Jorge Facundo).
Imágen 2: Para adicionar una base de datos al proyecto, hacemos click derecho en el
proyecto que se encuentra en el Explorador de Soluciones, en el desplegable
seleccionamos Agregar > Nuevo Item.
Imagen 3: Esta opción despliega una nueva ventana donde seleccionamos Base de Datos
basada en Servicio.
Programacion de Apliciones Distribuidas
Imagen 4: Para agregar una nueva tabla, en Tablas de las nueva base de datos creada
hacemos click derecho y seleccionamos Agregar Nueva Tabla.
Programacion de Apliciones Distribuidas
Imagen 6: Una vez creadas las tablas, debemos crear la tabla para normalizar la relación n
a m y en ella colocar los atributos que representaran las foreign keys de las tablas
relacionadas.
Imagen 7: Se deben agregar las claves foráneas (una por cada tabla relacionada).
Programacion de Apliciones Distribuidas
Imagen 15: realizamos los “inserts” necesarios.
22 - Creación de un archivo de base de datos local, con las tablas
necesarias para un sistema de pago de matrículas y cuotas de colegio.
Agregar ejemplos de instrucciones sql de select/join, insert, update y
delete (Autores:).
Programacion de Apliciones Distribuidas
23 - Creación de un archivo de base de datos local, con las tablas
necesarias para un sistema de Hotelería que contemple la reserva de
habitaciones. Agregar ejemplos de instrucciones sql de select/join,
insert, update y delete (Autores: Cerutti De la Cruz Jorge Facundo,
Gerez Edgardo Martin).
Imágen 2: Para adicionar una base de datos al proyecto, hacemos click derecho en el
proyecto que se encuentra en el Explorador de Soluciones, en el desplegable
seleccionamos Agregar > Nuevo Item.
Programacion de Apliciones Distribuidas
Imagen 3: Esta opción despliega una nueva ventana donde seleccionamos Base de Datos
basada en Servicio.
Imagen 5: Para agregar una nueva tabla, en Tablas de las nueva base de datos creada
hacemos click derecho y seleccionamos Agregar Nueva Tabla.
Dentro del proyecto creado usaremos la Base de Datos realizada en clases (punto 3 del
TP1)
Luego haremos click derecho sobre nuestro proyecto, iremos a la opción “agregar” y
después a la opción “nuevo elemento” y elegiremos crear un Windows Forms que lo
llamaremos “MostrarReporte”
Haremos click derecho sobre nuestro proyecto y agregaremos otro elemento más, este
elemento lo conseguiremos de “elementos de Visual C#”, “Datos” se llama Conjunto de
datos y le pondremos de nombre “DataSetFacuras”.
Programacion de Apliciones Distribuidas
Ahora vamos a crear otro nuevo elemento que será de tipo “Informe” y lo llamaremos
“InformeFacturas” (Archivo .rdlc).
Programacion de Apliciones Distribuidas
Aquí seleccionaremos el origen de datos que tendrá nuestra Tabla, y elegiremos nuestro
DataSet creado anteriormente.
En la pestaña código hay que agregarle el parámetro que va a recibir nuestro reporte, que
será el public DateTime Fecha y cómo sería una propiedad llevaría su get y su set.
También modificamos la linea de codigo donde recibe al Dataset creado, ya que también
recibiría una Fecha, por lo que hay q agregarle
ahora solo nos queda generar el evento para el botón “Generar Reporte” de nuestro Form1
Programacion de Apliciones Distribuidas
Al ejecutar la aplicación y seleccionar una fecha podemos ver como quedaría nuestro
Reporte
25 - Creación de una aplicación Web Form con reportes (RDLC),
utilizando la base de datos de ejemplo del punto 3(Autores: ).
2. Seleccionamos la opción de evaluación la cual nos durará 180 dias. Luego nos pedirá la
activación.
5. Seleccionamos para instalar las características de SQL Server o bien seleccionar Todas
las características con valores predeterminados.
Programacion de Apliciones Distribuidas
9. Luego nos pide el modo de autenticación en este caso agregamos el usuario administrador
actual , pero si queremos podemos agregar a varios.
Programacion de Apliciones Distribuidas
10. L
o mismo con los servicios.
11. S
eleccionamos instalar y configurar.
12. S
imilar al paso 9 y 10.
Programacion de Apliciones Distribuidas
13. S
iguiente.
14. N
os muestra lo que se va a instalar y presionamos para hacerlo.
Programacion de Apliciones Distribuidas
cadena de conexión).
7. Agregar el dataviewgrid
5- Console:
Para crear una aplicación de Windows: Vamos a “Archivo”,“Nuevo” “Proyecto…”:
6- En “Plantillas” elegimos “Visual C#”, ”Windows” y luego “Aplicación de Consola”
2- Se ingresa a la pantalla principlan web el cual se selecciona Split para tener la visión del
código y la imagen de la pagina web en donde vamos agregar elementos de la siguiente
manera
4- Ahora se realiza la función para el botón y la conexión con la pag web se toma
automáticamente
Programacion de Apliciones Distribuidas
3- una vez descarga se presiona acepta y se espera hasta que se termine de descargar
2- Se ingresa en la pantalla label button para realizar la interfaz para luego que queda de la
siguiente manera