Vous êtes sur la page 1sur 17

Lab 1: Creacin de una aplicacin ASP.NET utilizando procedimientos almacenados de Oracle.

Requerimientos de este laboratorio: Oracle 10g u 11g Servidor Visual Studio 2008 o Visual Studio 2010.

Paso 1: Inicie en Oracle para crear las tablas y los procedimientos almacenados.

---Tabla Productos-----CREATE TABLE Productos ( ProductoID int not null, Nombre varchar2(50) not null, Descripcion varchar2(1000) null, Precio numeric(20,4) default (0.0), Imagen varchar2(50) default 'GenericImagen.png' ); -----Agregar Condicin------------ALTER TABLE Productos ADD CONSTRAINT PK_Productos PRIMARY KEY (ProductoID); -----Crear Secuencia--------------CREATE SEQUENCE productos_secuencia START WITH 1 INCREMENT BY 1; INSERT INTO Productos values (producto_secuencia.NextVal,'El Mundo Sin Nosotros (Spanish Edition) ','Por Alan Weisman',2.99,'g1.jpg'); INSERT INTO Productos values (producto_secuencia.NextVal,'Handbook of Knots, the (Spanish Edition) ','Por Des Pawson',7.99,'g2.jpg'); INSERT INTO Productos values (producto_secuencia.NextVal,'Grayson (ESPANOL)','Por Lynne Cox ',7.99,'g3.jpg');

---------------------------------------------------------------------CREATE OR REPLACE PROCEDURE ObtenerProductos ( p_Data OUT SYS_REFCURSOR ) AS BEGIN OPEN P_Data FOR SELECT ProductoID,Nombre,Descripcion,Precio,Imagen FROM Productos; END ObtenerProductos; / ----------------------------------------------------------------------

CREATE PROCEDURE Agregar_Producto ( p_Nombre IN varchar2, p_Descripcion IN varchar2, p_Precio IN numeric, p_Imagen IN varchar2 ) AS BEGIN INSERT INTO Productos VALUES (producto_secuencia.nextval,p_Nombre,p_Descripcion,p_Precio,p_Imagen); END; / CREATE PROCEDURE Eliminar_Producto ( p_ProductoID in int ) AS BEGIN DELETE FROM Productos WHERE ProductoID = p_ProductoID; END; / CREATE PROCEDURE Actualizar_Producto ( p_ProductoID in int, p_Nombre IN varchar2, p_Descripcion IN varchar2, p_Precio IN numeric, p_Imagen IN varchar2 ) AS BEGIN UPDATE Productos SET Nombre = p_Nombre,Descripcion=p_Descripcion,Precio=p_Precio,Imagen=p_Imagen WHERE ProductoID=p_ProductoID; END; /

Paso 1: Abrir el sitio web llamado Lab1OracleASPNET_Comienzo, usted puede descargarlo de: http://public.blu.livefilestore.com/y1pry6OJmZ_ck2qvXu6CsDstZb3N5SUelXGoTIAXaokoY0KBwrVTFRmjPXbKA3 rPJ_wHIpzMEbJSk7ytTU_lS27Sw/Lab1OracleASPNET_Comienzo.rar?download Paso 2: Crear las siguiente clases en la carpeta APP_Code del Proyecto ASP.NET

Clases: Datos.cs

using using using using using using

System; System.Collections.Generic; System.Linq; System.Web; System.Data System.Data.OracleClient;

/// <summary> /// Clase de Metodos. /// </summary> public class Datos { static private string cadenaConexion = "Data Source=localhost/CODEAPP;User ID=SYSTEM;Password=admin;Unicode=True;"; public static OracleCommand CrearComandoSP() { OracleConnection _conexion = new OracleConnection(); _conexion.ConnectionString = cadenaConexion; OracleCommand _comando = new OracleCommand(); _comando = _conexion.CreateCommand(); _comando.CommandType = CommandType.StoredProcedure; return _comando; } public static DataTable RegresarDatos(OracleCommand comando) { DataTable _tabla = new DataTable(); try { comando.Connection.Open(); OracleDataAdapter adaptador = new OracleDataAdapter(); adaptador.SelectCommand = comando; adaptador.Fill(_tabla); } catch (Exception ex) {throw ex;} finally {comando.Connection.Close();} return _tabla; } public static void EjecutarSentencia(OracleCommand comando) { try { comando.Connection.Open(); comando.ExecuteNonQuery(); } catch (Exception ex) { throw ex; } finally { comando.Connection.Close(); } } }

El primer mtodo que debe crear es ObtenerProductos();


using using using using using using System; System.Collections.Generic; System.Linq; System.Web; System.Data; System.Data.OracleClient;

/// <summary> /// Summary description for Producto /// </summary> public class Producto { public Producto() { // // TODO: Add constructor logic here // } public static DataTable ObtenerProductos() { OracleCommand _comando = Datos.CrearComandoSP(); _comando.CommandText = "ObtenerProductos"; _comando.Parameters.Add("P_Data", OracleType.Cursor).Direction = ParameterDirection.Output; return Datos.RegresarDatos(_comando); } }

Paso 2: Cree un nuevo Formulario

Coloque un control gridview para mostrar los datos y su respectivo cdigo en el evento Load().

using using using using using using

System; System.Collections.Generic; System.Linq; System.Web; System.Web.UI; System.Web.UI.WebControls;

public partial class Productos : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { GridView1.DataSource=Producto.ObtenerProductos(); GridView1.DataBind(); } }

Agregue los siguientes controles:

Control 1 Label 1 TextBox 1 Label 1 TextBox 1 Label 1 TextBox 1 Label 1 TextBox 1 Button

ID lblNombre txtNombre lblDescripcion txtDescripcion lblPrecio txtPrecio lblImagen txtImagen btnAgregarProducto

Text Nombre Descripcin Precio Imagen Agregar Producto

Agregue los siguientes mtodos a Producto.cs.

public static void AgregarProducto(string nombre, string descripcion, double precio, string imagen) { OracleCommand _comando = Datos.CrearComandoSP(); _comando.CommandText = "Agregar_Producto"; OracleParameter param = _comando.CreateParameter(); param.ParameterName = "p_Nombre"; param.Direction = ParameterDirection.Input; param.Value = nombre; param.OracleType = OracleType.VarChar; _comando.Parameters.Add(param); param = _comando.CreateParameter(); param.ParameterName = "p_Descripcion"; param.Direction = ParameterDirection.Input; param.Value = descripcion; param.OracleType = OracleType.VarChar; _comando.Parameters.Add(param); param = _comando.CreateParameter(); param.ParameterName = "p_Precio"; param.Direction = ParameterDirection.Input; param.Value = precio; param.OracleType = OracleType.Number; _comando.Parameters.Add(param); param = _comando.CreateParameter(); param.ParameterName = "p_Imagen"; param.Direction = ParameterDirection.Input; param.Value = imagen; param.OracleType = OracleType.VarChar; _comando.Parameters.Add(param); Datos.EjecutarSentencia(_comando); }

public static void EliminarProducto(string productoID) { OracleCommand _comando = Datos.CrearComandoSP(); _comando.CommandText = "EliminarProducto"; OracleParameter param = _comando.CreateParameter(); param.ParameterName = "p_ProductoID"; param.Direction = ParameterDirection.Input; param.Value = productoID; param.OracleType = OracleType.Int32; _comando.Parameters.Add(param); Datos.EjecutarSentencia(_comando); } public static void ActualizarProducto(string productoid, string nombre, string descripcion, double precio, string imagen) { OracleCommand _comando = Datos.CrearComandoSP(); _comando.CommandText = "ActualizarProducto"; OracleParameter param = _comando.CreateParameter(); param.ParameterName = "p_ProductoID"; param.Direction = ParameterDirection.Input; param.Value = productoid; param.OracleType = OracleType.Int32; _comando.Parameters.Add(param); param = _comando.CreateParameter(); param.ParameterName = "p_Nombre"; param.Direction = ParameterDirection.Input; param.Value = nombre; param.OracleType = OracleType.VarChar; _comando.Parameters.Add(param); param = _comando.CreateParameter(); param.ParameterName = "p_Descripcion"; param.Direction = ParameterDirection.Input; param.Value = descripcion; param.OracleType = OracleType.VarChar; _comando.Parameters.Add(param); param = _comando.CreateParameter(); param.ParameterName = "p_Precio"; param.Direction = ParameterDirection.Input; param.Value = precio; param.OracleType = OracleType.Number; _comando.Parameters.Add(param); param = _comando.CreateParameter(); param.ParameterName = "p_Imagen"; param.Direction = ParameterDirection.Input; param.Value = imagen; param.OracleType = OracleType.Varchar; _comando.Parameters.Add(param); Datos.EjecutarSentencia(_comando); }

Agregue los siguientes mtodos Actualizar(), Limpiar() y en el evento clic del botn Agregar Producto.

using using using using using using

System; System.Collections.Generic; System.Linq; System.Web; System.Web.UI; System.Web.UI.WebControls;

public partial class Productos : System.Web.UI.Page { public void Limpiar() { txtNombre.Text = ""; txtDescripcion.Text = ""; txtImagen.Text = ""; txtPrecio.Text = ""; } public void Actualizar() { GridView1.DataSource = Producto.ObtenerProductos(); GridView1.DataBind(); } protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Actualizar(); } } protected void btnAgregarProducto_Click(object sender, EventArgs e) { Producto.AgregarProducto(txtNombre.Text, txtDescripcion.Text, double.Parse(txtPrecio.Text), txtImagen.Text); Actualizar(); Limpiar(); } }

Presione F5.

Personalizando el GridView para el manejo de los datos.

Cdigo HTML:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None" DataKeyNames="ProductoID" onselectedindexchanged="GridView1_SelectedIndexChanged" onrowdatabound="GridView1_RowDataBound" onrowdeleting="GridView1_RowDeleting"> <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> <Columns> <asp:commandfield ShowSelectButton="true" SelectText="Seleccionar"/> <asp:BoundField DataField="ProductoID" HeaderText="ID"/> <asp:BoundField DataField="Nombre" HeaderText="Nombre" /> <asp:BoundField DataField="Descripcion" HeaderText="Descripcin" /> <asp:BoundField DataField="Precio" HeaderText="Precio" /> <asp:BoundField DataField="Imagen" HeaderText="Imagen" /> <asp:TemplateField HeaderText=""> <ItemTemplate> <asp:LinkButton ID="lkEliminar" CommandArgument='<%# Eval("ProductoID") %>' CommandName="Delete" runat="server">Eliminar</asp:LinkButton> </ItemTemplate> </asp:TemplateField> </Columns> <EditRowStyle BackColor="#999999" /> <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> <SortedAscendingCellStyle BackColor="#E9E7E2" /> <SortedAscendingHeaderStyle BackColor="#506C8C" /> <SortedDescendingCellStyle BackColor="#FFFDF8" /> <SortedDescendingHeaderStyle BackColor="#6F8DAE" /> </asp:GridView>

Agregue los siguientes controles:

Control 1 Button 1 Button

ID btnActualizarProducto btnCancelar

Text Actualizar Producto Cancelar

Necesitar agregar los siguientes eventos del Gridview en Clic Derecho Propiedades del control Eventos despus dando doble clic en cada uno de ellos.

Cdigo Completo:
using using using using using using System; System.Collections.Generic; System.Linq; System.Web; System.Web.UI; System.Web.UI.WebControls;

public partial class Productos : System.Web.UI.Page { public void Limpiar() { txtNombre.Text = ""; txtDescripcion.Text = ""; txtImagen.Text = ""; txtPrecio.Text = ""; } public void Actualizar() { GridView1.DataSource = Producto.ObtenerProductos(); GridView1.DataBind(); } protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Actualizar(); } }

protected void btnAgregarProducto_Click(object sender, EventArgs e) { if (txtNombre.Text != "") { Producto.AgregarProducto(txtNombre.Text, txtDescripcion.Text, double.Parse(txtPrecio.Text), txtImagen.Text); Actualizar(); Limpiar(); } else { Response.Write("Debe llenar todos los campos"); } } protected void btnCancelar_Click(object sender, EventArgs e) { Limpiar(); btnActualizarProducto.Enabled = false; btnAgregarProducto.Enabled = true; } protected void btnActualizarProducto_Click(object sender, EventArgs e) { GridViewRow fila = GridView1.SelectedRow; string productoID = fila.Cells[1].Text; Producto.ActualizarProducto(productoID, txtNombre.Text, txtDescripcion.Text, double.Parse(txtPrecio.Text), txtImagen.Text); Actualizar(); Limpiar(); btnActualizarProducto.Enabled = false; btnAgregarProducto.Enabled = true; } protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) { GridViewRow fila = GridView1.SelectedRow; txtNombre.Text = fila.Cells[2].Text; txtDescripcion.Text = fila.Cells[3].Text; txtPrecio.Text = fila.Cells[4].Text; txtImagen.Text = fila.Cells[5].Text; btnActualizarProducto.Enabled = true; btnAgregarProducto.Enabled = false; } protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { LinkButton l = (LinkButton)e.Row.FindControl("lkEliminar"); l.Attributes.Add("onclick", "javascript:return " + "confirm('Esta seguro de eliminar el siguiente libro: " + DataBinder.Eval(e.Row.DataItem, "Nombre") + "')"); } } protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) { string productoID = GridView1.DataKeys[e.RowIndex].Value.ToString(); Producto.EliminarProducto(productoID); Actualizar(); } }

Presione F5:

Material Elaborado para Tecnologas Microsoft y para la comunidad de estudiantes y profesionales. Edison Daniel Garca Chias Microsoft Student Partner / Microsoft Mxico. edison@student-partners.com http://mredison.wordpress.com

Material Final de descarga: http://ckbwpg.blu.livefilestore.com/y1pfjfRMeBj3XejjPETTCEV2u71ogbxTVL55tboZ3qSV27KKcrP9y2Y0_TnvYOH8YERuNsn1mwLeUeDsdudukNeyiKlvNEiYR2/Lab1Or acleASPNET_Fin.rar?download