Programming with Oracle and ASP.NET

Creación de una aplicación ASP.NET utilizando procedimientos almacenados de Oracle.

Requerimientos:

· 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 Condición-------------
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');
----------------------------------------------------------------------

Procedimientos Almacenados:

----------------------------------------------------------------------
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: AQUÍ

Paso 2: Crear las siguiente clases en la carpeta APP_Code del Proyecto ASP.NET

Clases: Datos.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data
using 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 método que debe crear es ObtenerProductos();

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using 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 llamado Productos.aspx

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

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using 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();
    }
}

Presione F5.

Agregue los siguientes controles:

Control

ID

Text

1 Label

lblNombre

Nombre

1 TextBox

txtNombre

 

1 Label

lblDescripcion

Descripción

1 TextBox

txtDescripcion

 

1 Label

lblPrecio

Precio

1 TextBox

txtPrecio

 

1 Label

lblImagen

Imagen

1 TextBox

txtImagen

 

1 Button

btnAgregarProducto

Agregar Producto

Agregue los siguientes métodos 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 métodos Actualizar(), Limpiar() y en el evento clic del botón Agregar Producto.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using 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.

Código HTML:

Agregue los siguientes controles:

<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="Descripción" />
            <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>

Control

ID

Text

1 Button

btnActualizarProducto

Actualizar Producto

1 Button

btnCancelar

Cancelar

Necesitará agregar los siguientes eventos del Gridview en Clic Derecho Propiedades del control – Eventos – después dando doble clic en cada uno de ellos.

Código Completo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using 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:

PDF Descargable: http://mredison.files.wordpress.com/2009/11/oracleaspnet-sp.pdf

Material Final de descarga: AQUI

Saludos, Nos vemos en la siguiente entrega de Oracle y .NET

By Edison Daniel García Chiñas

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s