1. Inicie sesión en su manejador de base de datos y agregue los procedimientos de almacenados mediante los cuales manejaremos las tablas agregadas en la práctica anterior. 2. Colóquese en su base de datos. En la sección de Programmability Agregue un nuevo Stored Procedure
4. Agregue primero el sp_bloques USE [db_prision] GO /****** Object: StoredProcedure [dbo].[sp_bloques] Script Date: 09/03/2014 11:04:39 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE procedure [dbo].[sp_bloques] @accion int, @Id_Bloque int=null, @Capacidad int=null, @Descripcion varchar(50)='' as --accion para insertar bloques if @accion=1 begin insert into Tbl_Bloque values (@Capacidad,@Descripcion) end --accion para eliminar bloques if @accion=2 begin delete Tbl_Bloque where Id_Bloque=@Id_Bloque end --accion para actualizar if @accion=3 begin update Tbl_Bloque set Capacidad=@Capacidad,Descripcion=@Descripcion where Id_Bloque=@Id_Bloque end --accion para buscar por id if @accion=4 begin select * from Tbl_Bloque where Id_Bloque=@Id_Bloque end
Ejecútelo 5. Ya que tiene creado los SP para su base datos, es momento de agregar en la capa de datos las clases encargadas de manejarlas. Crearemos la Clase encargada manejar la conexión con SQL en este caso, agregale dentro del repositorio de Datos class Conexion_sql /// <summary> /// Cadena de Conexion a SQL /// </summary> private SqlConnection cn; static string Server = @"(local)"; static string User = "uprision"; static string Pass = "123456"; static string BD = "db_prision"; public Conexion_sql() try this.crearconexion(server, User, Pass, BD); this.abirconexion(); catch (Exception ex) /// <summary>
/// metodo para conectarse a su base de datos /// </summary> /// <param name="servidor"></param> /// <param name="usuario"></param> /// <param name="password"></param> /// <param name="nombrebase"></param> private void CrearConexion(String servidor, String usuario, String password, String nombrebase) string cadena = "Server =" + servidor + "; uid =" + usuario + "; pwd=" + password + "; database= " + nombrebase; this.cn = new SqlConnection(cadena); private void AbirConexion() this.cn.open(); public void ConexClose() this.cn.close(); public DataTable ExecuteSp(string sp, List<SqlParameter> args) //int i = 0; DataTable dt = new DataTable(); SqlCommand cmd; cmd = new SqlCommand(sp, this.cn); cmd.commandtype = CommandType.StoredProcedure; cmd.parameters.addrange(args.toarray()); //new SqlDataAdapter(cmd).Fill(dt); SqlDataAdapter dta = new SqlDataAdapter(cmd); dta.fill(dt); return dt;
6. Ahora necesitamos crear la clase que manejara los objetos del negocio en la base de datos, dentro del mismo repositorio de Datos Agregue la clase BloqueBD. class BloqueBD /// <summary> /// metodo para consultar bloque por id /// </summary> /// <returns></returns> public Bloque ConsultarBloque(int id) //instancia el objeto que regresara Bloque obbloque = new Bloque(); try ; //intancia la lista de parametros que recibe el procedimiento List<SqlParameter> param = new List<SqlParameter>() //se agregan los valores de los parametros new SqlParameter("@accion", 4), new SqlParameter("@Id_Bloque",id) //se ejecuta el procedimieno DataTable registro = new Conexion_sql().ExecuteSp("sp_bloques", param); //se llena el objeto a regresar foreach (DataRow fila in registro.rows) obbloque.idbloque = Convert.ToInt32(fila["Id_Bloque"].ToString()); obbloque.capacitad = Convert.ToInt32(fila["Capacidad"].ToString()); obbloque.descripcion = fila["descripcion"].tostring(); catch (Exception ex) obbloque=null; return obbloque;
/// <summary> /// metodo para borrar bloque /// </summary> /// <param name="id"></param> /// <returns></returns> public bool BorrarBloque(int id) bool correcto; try //intancia la lista de parametros que recibe el procedimiento List<SqlParameter> param = new List<SqlParameter>() //se agregan los valores de los parametros new SqlParameter("@accion", 2), new SqlParameter("@Id_Bloque",id) ; //se ejecuta el procedimieno DataTable registro = new Conexion_sql().ExecuteSp("sp_bloques", param); //se llena el objeto a regresar correcto = true; catch (Exception ex) correcto = false; return correcto; /// <summary> /// Metodo para actualizar un bloque /// </summary> /// <param name="id"></param> /// <param name="descripcion"></param> /// <param name="capacidad"></param> /// <returns></returns> public bool ActualizarBloquee(int id, string descripcion, int capacidad) bool correcto;
try //intancia la lista de parametros que recibe el procedimiento List<SqlParameter> param = new List<SqlParameter>() //se agregan los valores de los parametros new SqlParameter("@accion", 3), new SqlParameter("@Id_Bloque",id), new SqlParameter("@Capacidad", capacidad), new SqlParameter("@Descripcion",descripcion) ; //se ejecuta el procedimieno DataTable registro = new Conexion_sql().ExecuteSp("sp_bloques", param); //se llena el objeto a regresar correcto = true; catch (Exception ex) correcto = false; return correcto; public bool AgregarBloque(string descripcion, int capacidad) bool correcto; try //intancia la lista de parametros que recibe el procedimiento List<SqlParameter> param = new List<SqlParameter>() //se agregan los valores de los parametros new SqlParameter("@accion", 1), new SqlParameter("@Capacidad", capacidad), new SqlParameter("@Descripcion",descripcion)
; //se ejecuta el procedimieno DataTable registro = new Conexion_sql().ExecuteSp("sp_bloques", param); //se llena el objeto a regresar correcto = true; catch (Exception ex) correcto = false; return correcto; 7. Dentro del directorio de presentación vamos agregar una clase de servicio para los validadores de datos, los cuales podremos reusar en los campos de todos los campos que se necesiten en las otras formas, agregue una nueva clase y utilice los métodos que se muestran a continuación /// <summary> /// Esta Clase presenta metodos de servicio comunes utilizados en la capa de presentacion /// </summary> class Servicio /// <summary> /// Metodo para validar el evento KeyPress /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void KeyPressValida(object sender, KeyPressEventArgs e) if (char.isletter(e.keychar) char.issymbol(e.keychar) char.iswhitespace(e.keychar) char.ispunctuation(e.keychar)) e.handled = true;
/// <summary> /// Metodo para validar el portapapeles con KeyDown /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void keydownvalidaportapapeles(object sender, KeyEventArgs e) //Allow navigation keyboard arrows switch (e.keycode) case Keys.Up: case Keys.Down: case Keys.Left: case Keys.Right: case Keys.PageUp: case Keys.PageDown: case Keys.Delete: e.suppresskeypress = false; return; default: break; //Block non-number characters char currentkey = (char)e.keycode; bool modifier = e.control e.alt e.shift; bool nonnumber = char.isletter(currentkey) char.issymbol(currentkey) char.iswhitespace(currentkey) char.ispunctuation(currentkey); if (!modifier && nonnumber) e.suppresskeypress = true; //Handle pasted Text if (e.control && e.keycode == Keys.V) //Preview paste data (removing non-number characters)
string pastetext = Clipboard.GetText(); string strippedtext = ""; for (int i = 0; i < pastetext.length; i++) if (char.isdigit(pastetext[i])) strippedtext += pastetext[i].tostring(); if (strippedtext!= pastetext) //There were non-numbers in the pasted text e.suppresskeypress = true; //OPTIONAL: Manually insert text stripped of non-numbers TextBox me = (TextBox)sender; int start = me.selectionstart; string newtxt = me.text; newtxt = newtxt.remove(me.selectionstart, me.selectionlength); //remove highlighted text newtxt = newtxt.insert(me.selectionstart, strippedtext); //paste me.text = newtxt; me.selectionstart = start + strippedtext.length; else e.suppresskeypress = false;
8. Agregue un nuevo Windows Form para el manejo de bloques nómbrelo DispBloque, agregue los elemento que se muestran a continuación
txtidbloque txtcapacidad txtdescripcion btnbuscar Este botón buscara un elemento con el id recibido y lo mostrara en los campos de texto. btnactualizar Este botón actualizara un elemento con el id recibido y los demás parámetros. btneliminar Este botón eliminara un documento con el id recibido. btnagregar Este botón recibirá los campos necesarios para agregar un nuevo elemento. Recuerde agregar la referencia a los paquetes de Datos y Negocio. using practica4.datos; using practica4.negocio;
BloqueBD using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using practica4.negocio; using System.Data.SqlClient; using System.Data; Conexion_sql using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data; using System.Data.SqlTypes; using System.Data.SqlClient; Servicio using practica4.datos; using practica4.negocio;
Botones eventos Click: btnbuscar BloqueBD bdbloque = new BloqueBD(); Bloque objeto = bdbloque.consultarbloque(convert.toint32(txtidbloque.text)); if (objeto.idbloque!= 0) txtcapacidad.text = objeto.capacitad.tostring(); txtdescripcion.text = objeto.descripcion; else MessageBox.Show("El bloque no existe"); btnactualizar BloqueBD bdbloque = new BloqueBD(); Bloque objeto = bdbloque.consultarbloque(convert.toint32(txtidbloque.text)); if (objeto.idbloque!= 0) //mostramos un dialogo que solicita confirmar la accion DialogResult result = MessageBox.Show("Deseas actualizar el bloque", "Bloques", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); if (result == DialogResult.OK) bdbloque.actualizarbloquee(convert.toint32(txtidbloque.text), txtdescripcion.text, Convert.ToInt32(txtCapacidad.Text)); MessageBox.Show("se actualizo el bloque"); else
MessageBox.Show("No se actualizo el bloque"); else MessageBox.Show("El bloque no existe"); btneliminar // se crea la instancia del objeto bloquebd BloqueBD bdbloque = new BloqueBD(); // llena el bloque con el resultado del método que es del mismo valor Bloque objeto = bdbloque.consultarbloque(convert.toint32(txtidbloque.text)); //validamos si existe el bloque, si es igual a indica que no existe if (objeto.idbloque!= 0) //mostramos un dialogo que solicita confirmar la accion DialogResult result = MessageBox.Show("Deseas borrar el bloque", "Bloques", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); if (result == DialogResult.OK) bdbloque.borrarbloque(convert.toint32(txtidbloque.text)); MessageBox.Show("se borro el bloque"); else MessageBox.Show("No se borro el bloque"); else MessageBox.Show("El bloque no existe");
btnagregar BloqueBD bdbloque = new BloqueBD(); //Bloque objeto = bdbloque.consultarbloque(convert.toint32(txtidbloque.text)); //mostramos un dialogo que solicita confirmar la accion DialogResult result = MessageBox.Show("Deseas agregar el bloque", "Bloques", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); if (result == DialogResult.OK) bdbloque.agregarbloque(txtdescripcion.text, Convert.ToInt32(txtCapacidad.Text)); MessageBox.Show("se agrego el bloque"); else MessageBox.Show("No se agrego el bloque"); //recargamos la forma para limpiar y actualizar los campos en el grid this.close(); DispBloque dispbloques = new DispBloque(1); dispbloques.show();