Tema 4 y 5: Curso ADO.NET

19 11 2009




Programming with Oracle and ASP.NET

16 11 2009

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.

OracleASPNET_01

---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

OracleASPNET_02

Clases: Datos.cs

OracleASPNET_03

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(); }
    }

}

OracleASPNET_04

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().

OracleASPNET_05 

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.

OracleASPNET_06

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

OracleASPNET_07

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.

OracleASPNET_08

Personalizando el GridView para el manejo de los datos.

OracleASPNET_09

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

OracleASPNET_10

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

OracleASPNET_11

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:

OracleASPNET_12

OracleASPNET_13

OracleASPNET_14

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

Edison Daniel García Chiñas





Tema 3: Curso ADO.NET

14 11 2009

Que tal estimados lectores, una disculpa por el retraso en la actualización del blog, les comparto el tercer tema dado en el curso de ADO.NET. Nos vemos en la siguiente entrega.

URL:http://mredison.files.wordpress.com/2009/11/viernes13noviembre2009.pdf





Tema 2 – Curso de ADO.NET Online

12 11 2009

Les coloco el segundo pdf,que se vio en la sesión de hoy. Nos vemos mañana.

Comentario, dudas por esta sección.

Gracias.

PDF: http://mredison.files.wordpress.com/2009/11/miercoles11noviembre2009.pdf

Saludos





Tema 1 – Material ADO.NET

11 11 2009

Estimados lectores que estan siguiendo el curso online de ADO.NET, les coloco el material visto el día de hoy en el curso presencial de ADO.NET.

Este laboratorio contiene los temas:

  • Creando una base de datos SQL Server.
  • Conectarse a una base de datos SQL SERVER desde Visual Studio 2008.
  • Mostrar datos en una regilla de datos en Visual Studio 2008.

Preguntas o comentarios en esta sección.

Saludos…

PDF: http://mredison.files.wordpress.com/2009/11/martes10noviembre2009.pdf

Nos vemos mañana con otro tema del curso.





ADO.NET Curso Online

9 11 2009

Estimados lectores, el curso de ADO.NET que se dará de manera presencial en Veracruz, México, se replicará en línea a partir del Martes 10 de Noviembre, podrán seguirlo desde este blog, descargar los PDF, ejercicios y documentación del curso.

Atentamente Edison. Las preguntas o comentarios serán de acuerdo a cada post o tema (día) en la sección de comentarios. Gracias. En hora buena.

Les comparto el programa.

Nota: El primer tema se colocará el Martes de 10 de Noviembre del 2009.

Programa1-ADONET Programa2-ADONET Programa3-ADONET Programa4-ADONET

Saludos.