You are on page 1of 26

Manual Programacin Aplicada I

Cuando creamos aplicaciones enlazando una base de datos a nuestro proyecto: Se debe escribir siempre la siguiente lnea de cdigo:
using System.Data.SqlClient;(esto nos permitir enlazar la base de datos a nuestro programa)

Despus de esto, debemos crear una conexin o va de acceso a nuestra base de datos, luego crearemos un objeto que literalmente traiga toda la informacin requerida y lo deposite en un contenedor. private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { //Conexin SqlConnection conex = new SqlConnection("Server=. ; Database=Northwind; trusted_connection=true"); //Objeto que traer los datos desde el procedimiento ProdCate usando la va conex SqlDataAdapter sql = new SqlDataAdapter("ProdCate", conex); //Cuando trabajamos con procedimientos sql.SelectCommand.CommandType = CommandType.StoredProcedure; sql.SelectCommand.Parameters.Add("@cate", SqlDbType.Int).Value = Convert.ToInt32(listBox1.SelectedValue); DataSet datos = new DataSet(); sql.Fill(datos,"productos"); dataGridView1.DataSource = datos.Tables["Productos"];

Esto junto con el procedimiento almacenado en sql:


---Ejercicio: Seleccione una categora y que muestre los productos que le pertenecen create procedure ProdCate @cate int as Select ProductId,ProductName,Unitprice from Products where CategoryID=@cate

Nos permitirn crear la aplicacin en Visual usando una listBox para elegir los valores que tome @cate:

Aplicando lo anterior, pero con una consulta en vez de un procedimiento almacenado: el ejercicio es mostrar todos los atributos de los empleados que trabajan en la ciudad de London.
using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.SqlClient; namespace WindowsFormsApplication5 { public partial class MostrarEmpleados : Form { public MostrarEmpleados() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { SqlConnection conex = new SqlConnection("Server=. ; Database=Northwind; trusted_connection=true"); SqlDataAdapter sql = new SqlDataAdapter("Select * from Employees where City='London'", conex); DataSet datos = new DataSet(); sql.Fill(datos, "Empleado"); dataGridView1.DataSource = datos.Tables["Empleado"]; } } }

Ejercicios:
Ingresar alumnos a la base de datos Northwind, teniendo como atributos: IdAlumno, Nombres, Apellidos, Direccin y Sexo mediante un botn. Sentencia SQL:
-------Insertar Alumno---Create procedure inserta_a @nom varchar(20), @ape varchar(30), @dir varchar(30), @sex char(1) as insert into Alumnos (nombre,apellido,direccion,sexo) values (@nom,@ape,@dir,@sex)

private void button1_Click(object sender, EventArgs e) { char sex; SqlConnection con = new SqlConnection("server=. ; database=Northwind ; trusted_connection=true"); //Para procedimiento almacenado SqlCommand sql = new SqlCommand("inserta_a", con); sql.CommandType = CommandType.StoredProcedure; sql.Parameters.Add("@nom", SqlDbType.VarChar,20).Value = textBox1.Text; sql.Parameters.Add("@ape", SqlDbType.VarChar, 30).Value = textBox2.Text; sql.Parameters.Add("@dir", SqlDbType.VarChar, 30).Value = textBox3.Text; if (radioButton1.Checked == true) sex = 'M'; else sex = 'F'; sql.Parameters.Add("@sex", SqlDbType.Char, 1).Value = sex; //Para abrir la conexin, la instruccin fill abra y cerraba automticamnete la conexin, cuando se abre la conexin se comprueba si afect a alguna fila, si es as devolver 1. con.Open(); int resp = sql.ExecuteNonQuery(); con.Close(); if (resp == 1) { MessageBox.Show("Se insert el registro!"); textBox1.Text = ""; textBox2.Text = ""; textBox3.Text = ""; textBox1.Focus(); } }

Ejecucin del Programa:

Ingresar un empleado y elegir su categora, rea de trabajo, si est nombrado y visualizar esto.
Sentencia SQL:
------------------Creando el procedimiento almacenado-----------------Alter procedure Pers @nom varchar(25), @ape varchar(35), @dir varchar(35), @sex char, @nombrado bit, @idA int, @idCa int as insert into Personal (nombre,apellido,direccion,sexo,nombrado,IdArea,IdCate) values(@nom,@ape,@dir,@sex,@nombrado,@idA,@idCa) Select * from Personal

Cdigo en Visual:

private void Personal_Load(object sender, EventArgs e) { // TODO: esta lnea de cdigo carga datos en la tabla 'northwindDataSet1.CategoriaP' Puede moverla o quitarla segn sea necesario. this.categoriaPTableAdapter.Fill(this.northwindDataSet1.CategoriaP); // TODO: esta lnea de cdigo carga datos en la tabla 'northwindDataSet.Area' Puede moverla o quitarla segn sea necesario. this.areaTableAdapter.Fill(this.northwindDataSet.Area); } SqlConnection pers = new SqlConnection("server=. ; database=Northwind ; trusted_connection=true"); private void button1_Click(object sender, EventArgs e) { char sexo; //Para procedimiento almacenado SqlCommand sql = new SqlCommand("Pers", pers); sql.CommandType = CommandType.StoredProcedure; sql.Parameters.Add("@nom", SqlDbType.VarChar, 25).Value = textBox1.Text; sql.Parameters.Add("@ape", SqlDbType.VarChar, 35).Value = textBox2.Text; sql.Parameters.Add("@dir", SqlDbType.VarChar, 35).Value = textBox3.Text; if (radioButton1.Checked == true) sexo = 'F'; else sexo = 'M'; sql.Parameters.Add("@sex", SqlDbType.Char, 1).Value = sexo; //Aadir una rea: sql.Parameters.Add("@idA", SqlDbType.Int).Value = comboBox1.SelectedValue; //Para aadir una categora con la listBox sql.Parameters.Add("@idCa", SqlDbType.Int).Value = listBox1.SelectedValue;

if (checkBox1.Checked == true) sql.Parameters.Add("@nombrado", SqlDbType.Bit).Value = 1; else sql.Parameters.Add("@nombrado", SqlDbType.Bit).Value = 0; //Para abrir la conexin, la instruccin fill abra y cerraba automticamnete la conexin //int result=sql.ExecuteScalar(); pers.Open(); int resp = sql.ExecuteNonQuery(); pers.Close(); if (resp == 1) { MessageBox.Show("Se insert el registro!"); textBox1.Text = ""; textBox2.Text = ""; textBox3.Text = ""; textBox1.Focus(); } Visualizar(); }

private void Visualizar() { SqlDataAdapter s = new SqlDataAdapter("Select * from Personal", pers); DataSet DS = new DataSet(); s.Fill(DS, "Personal"); dataGridView1.DataSource = DS.Tables["Personal"]; }

Ejecucin:

Crear un sistema en el que se introduzca un usuario y su contrasea para que de esa manera acceda a introducir un nuevo empleado. Sentencias SQL:
Alter procedure UsuarioValidar @Idusuario varchar(20), @password varchar(20) as select COUNT(*) as NmeroResultados from Usuario where IdUsuario=@Idusuario and password=@password and estado='V'

Cdigo Visual: Validacin


using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.SqlClient; namespace WindowsFormsApplication5 { public partial class Usuario : Form { public Usuario() { InitializeComponent(); } int c = 0; SqlConnection us = new SqlConnection("server=. ; database=Northwind ; trusted_connection=true"); private void button1_Click(object sender, EventArgs e) { SqlCommand sql = new SqlCommand("UsuarioValidar", us); sql.CommandType = CommandType.StoredProcedure; sql.Parameters.Add("@Idusuario", SqlDbType.VarChar, 20).Value = textBox1.Text; sql.Parameters.Add("@password", SqlDbType.VarChar, 20).Value = textBox2.Text; us.Open(); object resul = sql.ExecuteScalar(); us.Close(); if (resul.Equals(1)) { MessageBox.Show("Clave acceptada!"); Personal p = new Personal(); p.Show(); textBox1.Text = ""; textBox2.Text = ""; } else { MessageBox.Show("El usuario y/o clave son incorrectos!"); textBox2.Text = ""; textBox2.Focus(); c++; if (c == 3) { deshabilitarestado(); MessageBox.Show("Has sobrepasado el nmero de intentos usuario " + textBox1.Text + " deshabilitado"); } } }

private void deshabilitarestado() { SqlCommand sql = new SqlCommand("ModificaEstado", us); sql.CommandType = CommandType.StoredProcedure; sql.Parameters.Add("@Idusuario", SqlDbType.VarChar, 20).Value = textBox1.Text; sql.Parameters.Add("@estado", SqlDbType.Char, 1).Value = 'F'; us.Open(); object resul = sql.ExecuteScalar(); us.Close(); } private void button2_Click(object sender, EventArgs e) { Administrador f = new Administrador(); f.Show(); } private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { ModificarPassword f1 = new ModificarPassword(); f1.Show(); } } }

Para habilitar usuario, en modo administrador:


private void button1_Click(object sender, EventArgs e) { SqlConnection us = new SqlConnection("server=. ; database=Northwind ; trusted_connection=true"); SqlCommand sql = new SqlCommand("ModificaEstado", us); sql.CommandType = CommandType.StoredProcedure; sql.Parameters.Add("@Idusuario", SqlDbType.VarChar, 20).Value = textBox1.Text; sql.Parameters.Add("@estado", SqlDbType.Char, 1).Value = 'V'; us.Open(); object resul = sql.ExecuteScalar(); us.Close(); MessageBox.Show("Usuario habilitado!"); Close(); }

Sentencia SQL: --------Creamos el procedimiento almacenado modificar estado--------------create procedure ModificaEstado @Idusuario varchar(20), @estado char(1) as update Usuario set estado=@estado where IdUsuario=@Idusuario

Modificar Password:
Alter procedure ActualizaP @Idusuario varchar(20), @pa varchar(20), @pn varchar(20) as update Usuario set password=@pn where IdUsuario=@Idusuario and password=@pa

private void button1_Click(object sender, EventArgs e) { SqlConnection us = new SqlConnection("server=. ; database=Northwind ; trusted_connection=true"); SqlCommand sql = new SqlCommand("ActualizaP", us); sql.CommandType = CommandType.StoredProcedure; sql.Parameters.Add("@Idusuario", SqlDbType.VarChar, 20).Value = textBox1.Text; sql.Parameters.Add("@pa", SqlDbType.VarChar, 20).Value = textBox2.Text; if (textBox3.Text.Equals(textBox4.Text)) { sql.Parameters.Add("@pn", SqlDbType.VarChar, 20).Value = textBox3.Text; us.Open(); object resul = sql.ExecuteScalar(); us.Close(); MessageBox.Show("Accin completada, clave modificada!!"); Close(); } else { MessageBox.Show("Las contraseas no son iguales, vuelva a introducirlas!"); textBox3.Text = ""; textBox4.Text = ""; textBox3.Focus(); } }

Para la creacin de reportes, usando una matriz o un grfico segn el siguiente ejemplo: Dar un reporte de la cantidad de productos comprados por los clientes segn cada categora de productos Consulta SQL:
Select CompanyName,CategoryName,SUM(quantity)as Total from Customers as C inner join Orders as O on C.CustomerID=O.CustomerID inner join [Order Details] as OD on O.OrderID=OD.OrderID inner join Products as P on OD.ProductID=P.ProductID inner join Categories as Ca on P.CategoryID=Ca.CategoryID group by CompanyName, CategoryName order by CompanyName, CategoryName

En nuestro data set, creamos la tabla PRODCOMCLICATE, el cul contendr la consulta SQL

Copiamos nuestra consulta en PRODCOMCLICATE, para hacer que se nos muestren las propiedades elegidas.

Clic en Finalizar. Para crear nuestro diseo de reporte, damos clic en nuestra carpeta de reportes y damos clic derecho, agregar, nuevo elemento, seleccionamos Reporting y luego clic en Informe para disear si nuestro ser una matriz de datos o un grfico. Damos luego clic en Nuevo (Datos del informe) y seleccionamos conjunto de datos, seleccionamos todos los atributos correspondientes.

Luego debemos ir a Cuadro de herramientas, es aqu donde seleccionaremos los elementos del informe.

Luego agregaremos un nuevo form, y seleccionaremos ReportViewer para mostrar nuestros datos o informe final.

Antes de ejecutarlo debemos asociar el ReportViewer a nuestro reporte creado (Donde agregamos la matriz, grfico, etc.)

Cuando ejecutamos obtenemos lo siguiente: Usando Matriz:

Usando Grfico:

Ejercicios:
SELECT LASTNAME + ' ' + FIRSTNAME AS NOMBRE, SUM (QUANTITY * UNITPRICE) AS TOTAL FROM Orders AS O INNER JOIN [Order Details] AS D ON O.OrderID = D.OrderID INNER JOIN Employees AS E ON O.EmployeeID = E.EmployeeID GROUP BY LASTNAME + ' ' + FIRSTNAME OTRA SENTENCIA: CREATE PROCEDURE CANT_PROD @Pais NCHAR(15), @IdEmple int as SELECT COMPANYNAME, YEAR(ORDERDATE) AS AO, SUM(QUANTITY) AS NUMERO FROM Customers AS C INNER JOIN ORDERS AS O ON C.CustomerID = O.CustomerID INNER JOIN [Order Details] AS D ON O.OrderID = D.OrderID INNER JOIN Products AS P ON D.ProductID = D.ProductID WHERE Country = @Pais AND EmployeeID = @IdEmple AND Discontinued = 0 GROUP BY COMPANYNAME, YEAR(ORDERDATE) --- ejercicio 2 (Ejercicios tareas) select ProductID, ProductName, UnitPrice, SupplierID from Products where SupplierID = @Supl -- ejercicio 3 select YEAR(orderdate) as ao, COUNT(orderID) as TOTAL

from Orders where MONTH(OrderDate) = @mes GROUP BY YEAR(orderdate) select orderid from Orders where YEAR(OrderDate) = EJERCICIO CON COMBOBOX:
public FormEjercicio2() { InitializeComponent(); } private void FormEjercicio2_Load(object sender, EventArgs e) { // TODO: esta lnea de cdigo carga datos en la tabla 'DataSet1Ejemplo.Products' Puede moverla o quitarla segn sea necesario. this.suppliersTableAdapter.Fill(this.northwindDataSet.Suppliers); // TODO: esta lnea de cdigo carga datos en la tabla 'northwindDataSet.Suppliers' Puede moverla o quitarla segn sea necesario. } private void label1_Click(object sender, EventArgs e) { } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { this.ProductsTableAdapter.Fill(this.DataSet1Ejemplo.Products, Convert.ToInt32(comboBox1.SelectedValue)); this.reportViewer1.RefreshReport(); }

1997 and MONTH(OrderDate) = 1

Si fuera listbox
public partial class Form2_ : Form { public Form2_() { InitializeComponent(); } private void Form2__Load(object sender, EventArgs e) { // TODO: esta lnea de cdigo carga datos en la tabla 'DataSet1Ejemplo.DataTable1' Puede moverla o quitarla segn sea necesario. } private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { this.DataTable1TableAdapter.Fill(this.DataSet1Ejemplo.DataTable1, Convert.ToInt32(listBox1.SelectedItem)); this.reportViewer1.RefreshReport(); } } }

EJERCICIO 1:
Crear un men que permita ingresar datos a una tabla, el cdigo se generar automticamente concatenando los dos primeros caracteres del nombre, con los dos ltimos caracteres del apellido, ms el ao de nacimiento y un nmero de 3 dgitos que se inicializa en 001 y aumenta solamente cuando se pueden generar cdigos repetidos. Ejemplo: Ingreso 1: Nombre: Mara Apellidos: Perez Cuellar Fecha de Nacimiento: 11/10/1991 Cdigo: Malar1991001

Ingreso 2: Nombre: Manuel Apellidos: Prez Castelar Fecha de Nacimiento: 08/11/1991 Cdigo: Mala1991002

Tambin se cargar en un ComboBox las ciudades del Per. Actualizar los datos y mostrarlos automticamente en un DataGriedView. El TextBox de cdigo no debe estar deshabilitado.

CDIGO EJERCICIO1:
Diseo de la tabla ingresos:

Deberemos cargar en el Load del ejercicio las ciudades y asignarlos al ComboBox.


private void Ejercicio2_Load(object sender, EventArgs e) { string sql = "SELECT NombreCiudad FROM Ciudades"; SqlConnection conex = new SqlConnection("Server = .; Database = DBMarket; trusted_connection = true"); DataSet dS = new DataSet(); SqlDataAdapter datos = new SqlDataAdapter(sql, conex); datos.Fill(dS, "Ciudades"); comboBox1.DataSource = dS.Tables[0]; comboBox1.ValueMember = "NombreCiudad"; comboBox1.DisplayMember = "NombreCiudad"; }

Cdigo en SQL para verificar si se encuentran repetidos, recibe como parmetro la cadena formada por las dos primeras letras del nombre, con las dos ltimas letras del apellido y el ao de nacimiento. Este procedimiento sirve para colocar el nmero del final de cdigo, si no hay repetidos colocaremos 001 y si no ir aumentando en 1 unidad. Este procedimiento devuelve la cantidad de repetidos que existen en la tabla.
CREATE PROC Contar_Repetidos (@cod varchar(20)) AS SELECT COUNT(*) AS TOTAL FROM Ingresos WHERE LEFT (Codigo, 8) = @cod

Cdigo en SQL para insertar un nuevo registro en la tabla Ingresos:


CREATE PROC InsertarNuevo (@cod varchar(20), @nom varchar(20), @ape varchar(20), @fn datetime, @ciu varchar(20), @sex bit) AS SET NOCOUNT ON INSERT INTO Ingresos (Codigo ,Nombres, Apellidos ,Fecha_Nacimiento,Cuidad, Sexo) VALUES (@cod, @nom, @ape, @fn, @ciu, @sex)

Cdigo en C# para cargar las ciudades de una base de datos llamada ciudades:
// conexin a la base de datos SqlConnection conex = new SqlConnection("Data Source=.;Initial Catalog=DBMarket;Integrated Security=True"); private void Ejercicio2_Load(object sender, EventArgs e)

{ string sql = "SELECT NombreCiudad FROM Ciudades"; SqlConnection conex = new SqlConnection("Server = .; Database = DBMarket; trusted_connection = true"); DataSet dS = new DataSet(); SqlDataAdapter datos = new SqlDataAdapter(sql, conex); datos.Fill(dS, "Ciudades"); comboBox1.DataSource = dS.Tables[0]; comboBox1.ValueMember = "NombreCiudad"; comboBox1.DisplayMember = "NombreCiudad"; }

Acciones que se realizan cuando se pulsa el botn:


private void button1_Click(object sender, EventArgs e) { // mtodo que genera la fecha string fecha = generarFecha(dateTimePicker1); // ingresando nuevo registro ingreso(fecha); // actualizando la tabla actualizar(); }

Funcin generarFecha:
public string generarFecha(DateTimePicker dateTimePicker1) { string dia = dateTimePicker1.Value.Day.ToString(); string mes = dateTimePicker1.Value.Month.ToString(); string ao = dateTimePicker1.Value.Year.ToString(); return dia + "/" + mes + "/" + ao; }

Mtodo ingreso:
public void ingreso(string fecha) { string nom = textBox2.Text; string ape = textBox3.Text; string ao = dateTimePicker1.Value.Year.ToString(); // generando los 8 primeros dgitos del cdigo string codInicial = nom.Substring(0, 2) + ape.Substring(ape.Length - 2, 2) + ao; MessageBox.Show(codInicial); SqlCommand datos1 = new SqlCommand("Contar_Repetidos", conex); datos1.CommandType = CommandType.StoredProcedure; datos1.Parameters.Add("@cod", SqlDbType.VarChar).Value = codInicial; conex.Open(); int res = (int)datos1.ExecuteScalar(); //res devuelve 0 si no hay repetidos conex.Close(); res++; string valorFinal; if (res < 10) valorFinal = "00" + res; else if (res < 100) valorFinal = "0" + res;

else valorFinal = res.ToString(); MessageBox.Show(valorFinal); string codigo = codInicial + valorFinal; SqlCommand datos2 = new SqlCommand("InsertarNuevo", conex); datos2.CommandType = CommandType.StoredProcedure; datos2.Parameters.Add("@cod", SqlDbType.VarChar).Value = codigo; datos2.Parameters.Add("@nom", SqlDbType.VarChar).Value = nom; datos2.Parameters.Add("@ape", SqlDbType.VarChar).Value = ape; datos2.Parameters.Add("@fn", SqlDbType.DateTime).Value = fecha; datos2.Parameters.Add("@ciu", SqlDbType.VarChar).Value = comboBox1.SelectedValue; bool sexo; if (radioButton1.Checked) sexo = false; else sexo = true; datos2.Parameters.Add("@sex", SqlDbType.Bit).Value = sexo; conex.Open(); datos2.ExecuteNonQuery(); conex.Close(); }

Mtodo actualizar:
public void actualizar() { DataSet dS1 = new DataSet(); SqlDataAdapter datos1 = new SqlDataAdapter("SELECT * FROM Ingresos", conex); datos1.Fill(dS1, "Ingresos"); dataGridView1.DataSource = dS1.Tables[0]; }

Ejercicio2:

public partial class Ejercicio2 : Form { public Ejercicio2() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { char sexo; SqlConnection cnn = new SqlConnection("server = .; database = NorthWind; trusted_connection = true"); //Para procedimiento almacenado SqlCommand sql = new SqlCommand("ejercicio2", cnn); sql.CommandType = CommandType.StoredProcedure; sql.Parameters.Add("@nom", SqlDbType.VarChar, 30).Value = textBox2.Text; sql.Parameters.Add("@ape", SqlDbType.VarChar, 30).Value = textBox3.Text; sql.Parameters.Add("@fn", SqlDbType.DateTime).Value = Convert.ToDateTime(textBox4.Text); sql.Parameters.Add("@ciu", SqlDbType.VarChar, 20).Value = comboBox1.SelectedValue; if (radioButton1.Checked == true) sexo = 'F'; else sexo = 'M'; sql.Parameters.Add("@sexo", SqlDbType.Char, 1).Value = sexo; //Para abrir la conexion cnn.Open(); int resp = sql.ExecuteNonQuery(); cnn.Close(); if (resp == 1) { MessageBox.Show("SE REGISTRO SATISFACTORIAMENTE!!!"); textBox2.Text = ""; textBox3.Text = ""; textBox4.Text = ""; textBox2.Focus(); } } private void Ejercicio2_Load(object sender, EventArgs e) { // TODO: esta lnea de cdigo carga datos en la tabla 'northwindDataSet2.empleados' Puede moverla o quitarla segn sea necesario. this.empleadosTableAdapter.Fill(this.northwindDataSet2.empleados); } }

EJERCICIO:

You might also like