Software y Aplicaciones Web

Blog de desarrollo de software y aplicaciones web

Comentarios Recientes

Comment RSS

MSDN Home Page (Argentina)


C# Corner


AspAlliance.com

Declaración

Las opiniones en este blog se proporcionan "TAL CUAL", sin garantías,  no confieren derechos y no reflejan, necesariamente, la opinión de quienes me contratan.
Algunas cuestiones que se comentan en el blog no son reales, cualquier similitud con alguna persona viva o muerta no es más que una coincidencia, tampoco significa que necesite terapia, soy asi.

© Copyright 2007-2010

Propaganda

Este sitio implementa publicidad basada en intereses
Oct
2.
2009

  Un poco de ADO.NET - parte 2

Continuamos con las publicaciones sobre ADO.NET.

En la publicación anterior vimos cómo se puede rápidamente construir una página que muestra el contenido completo de una tabla, si queremos podemos mostrar de varias tablas pero no es el caso.

En mi opinión esa no es la forma de trabajar, se puede utilizar para realizar un prototipo de interfaz de usuario pero de NINGUNA MANERA puede realizarse una aplicación de ese modo. Observen que todo está en un único archivo, la interfaz de usuario y el código de acceso a los datos. ¿Qué pasa cuando hace falta lógica de negocios?

Eso nos lleva a introducirnos más en lo que ADO.NET nos facilita, y en esta publicación vamos a ver un poco.

 

Veamos el siguiente código de un formulario (página) web:

   1:  <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="ADO2.WebForm1" %>
   2:   
   3:  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   4:   
   5:  <html xmlns="http://www.w3.org/1999/xhtml" >
   6:  <head runat="server">
   7:      <title></title>
   8:  </head>
   9:  <body>
  10:      <form id="form1" runat="server">
  11:      <div>
  12:      
  13:        <asp:GridView ID="gvPostal" runat="server">
  14:        </asp:GridView>
  15:      
  16:      </div>
  17:      </form>
  18:  </body>
  19:  </html>

Observen que en este caso el formulario web solamente tiene una entrada para un GridView al que decidí llamar gvPostal (porque voy a mostrar la información de Provincias, Departamentos y Localidades). La obtención de los datos la vamos a realizar por programa !!!.

En el Microsoft Framework 2.0 y superiores se encuentran varias formas de hacer esta tarea, más adelante espero poder mostrar algo sobre los DataSet Tipados pero por ahora vamos de a poco.

La idea de este ejercicio es poner un GridView en una página o formulario web y luego desde el código "enlazar" los datos con el componente de la interfaz de usuario, lo que se parece un poco más a una arquitectura en varias capas y niveles.

Vamos a necesitar una base de datos que tenga información sobre Provincias, Departamentos y Localidades; voy a agradecer a kerzek que realizó un buen script para SQL Server con el que se puede tener estas tablas, yo le agregué las relaciones y un procedimiento almacenado que vamos a utilizar en este ejemplo, este es el script (CreatePostal.zip (77,32 kb)), que deben ejecutar en un SQL Server Managemment.

Imagino que lograr un página con lo que está en el código anterior no les va a costar mucho Wink, así que vamos directamente al código asociado que es donde vamos a realizar la conexión con la base de datos y obtener la información.

A continuación está el código que va en el archivo asociado a la página web que está más arriba:

   1:  using System;
   2:  using System.Configuration;
   3:  using System.Data;
   4:  using System.Data.SqlClient;
   5:   
   6:  namespace ADO2
   7:  {
   8:    public partial class WebForm1 : System.Web.UI.Page
   9:    {
  10:      /// <summary>
  11:      /// Carga de la página
  12:      /// </summary>
  13:      /// <param name="sender">Referencia al objeto que ejecuta el evento</param>
  14:      /// <param name="e">Información del evento</param>
  15:      protected void Page_Load(object sender, EventArgs e)
  16:      {
  17:        MyDataBind();
  18:      }
  19:      /// <summary>
  20:      /// Enlace de datos personalizado
  21:      /// </summary>
  22:      protected void MyDataBind()
  23:      {
  24:        SqlConnection mySqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["Postal"].ConnectionString);
  25:   
  26:        SqlCommand mySqlCommand = new SqlCommand();
  27:        mySqlCommand.Connection = mySqlConnection;
  28:   
  29:        mySqlCommand.CommandText = "Postal_Load";
  30:        mySqlCommand.CommandType = CommandType.StoredProcedure;
  31:   
  32:        SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter(mySqlCommand);
  33:   
  34:        DataSet myDataSet = new DataSet();
  35:        mySqlDataAdapter.Fill(myDataSet);
  36:   
  37:        gvPostal.DataSource = myDataSet;
  38:        gvPostal.DataBind();
  39:      }
  40:    }
  41:  }

En las líneas 3 y 4 están los "using" necesarios para poder referenciar las clases del Framework que nos permite utilizar ADO.NET en nuestro código.

El método Page_Load( ... ) (que se ejecuta cada vez que se carga la página) nos permite invocar el código que rellena el GridView con los datos (ahora estoy rellenando el gridview todas las veces, habría que controlar que pasa cuando es un PostBack).

El método MyDataBind() muestra lo mínimo para obtener los datos:

En la línea 24 se declara y crea un objeto del SqlConnection que nos permite establecer una conexión con el motor de base de datos y una base de datos en particular, en este ejemplo se le está diciendo que mediante el ConfigurationManager obtenga la cadena de conexión que está en el web.config bajo el nombre de "Postal".

   1:    <connectionStrings>
   2:      <add name="Postal" connectionString="Data Source=ODIN;Initial Catalog=Postal;Integrated Security=True;"
   3:       providerName="System.Data.SqlClient" />
   4:   </connectionStrings>

Esto es lo que tengo en mi máquina, y seguramente algo parecido van a tener cuando lo hagan (cuidado yo estoy utilizando un servidor que se llama ODIN eso deben cambiar ustedes y poner .\SQLEXPRESS o simplemente un punto "." si es un motor de base de datos superior al express).

Seguimos con el código, en la línea 26 se declara y crea un objeto del tipo SqlCommand que nos permitirá ejecutar comandos en la base de datos; en la línea 27 le indicamos que ese objeto utilizará la conexión que creamos antes. Para usar el ConfigurationManager hay que tener el using de la línea 2.

En las líneas 29 y 30 estamos indicando que el comando a ejecutar es "Postal_Load", que resulta ser un procedimiento almacenado que está en la base de datos. El siguiente es el código que ejecuta ese procedimiento almacenado

   1:  USE [Postal]
   2:  GO
   3:  SET ANSI_NULLS ON
   4:  GO
   5:  SET QUOTED_IDENTIFIER ON
   6:  GO
   7:  CREATE PROCEDURE [dbo].[Postal_Load]
   8:  AS
   9:  BEGIN
  10:    SET NOCOUNT ON
  11:    SELECT 
  12:        L.ID
  13:      , L.idDepartamento
  14:      , L.Nombre AS NombreLocalidad
  15:      , D.idProvincia
  16:      , D.Nombre AS NombreDepartamento
  17:      , P.Nombre AS NombreProvincia
  18:      FROM Localidad AS L 
  19:        INNER JOIN Departamento AS D ON L.idDepartamento = D.ID 
  20:          INNER JOIN Provincia AS P ON D.idProvincia = P.ID
  21:    
  22:    RETURN
  23:  END
  24:  GO

Simplemente entrega todos los datos de la tabla Localidad además de entregar los nombres del departamento y provincia de cada localidad.

En la línea 32 del código en C# se declara y crea un objeto SqlDataAdapter que es el que nos permite acceder al motor de base de datos y ejecutar el comando que se indica al construirlo. Luego en las líneas 34 y 35 se crea un objeto del tipo DataSet (conjunto de datos) que se llena con lo que el adapter trae; o sea se carga con todos los registros de localidades que hay en la base de datos (medio demasiado pero se trata de un ejemplo).

Finalmente, en las líneas 37 y 38 se indica que el origen de datos del GridView es el DataSet y se enlaza los datos.

Todo esto permite mostrar en ese GridView "pelado" que tenemos en la interfaz de usuario el contenido de todas las localidades de nuestra base de datos.


Después que lo prueben les sugiero que realicen el siguiente cambio antes de conectar con la interfaz de usuario:

      
DataView myDataView = myDataSet.Tables[0].DefaultView;
myDataView.RowFilter = "NombreProvincia='JUJUY'";
myDataView.Sort = "NombreDepartamento DESC";

gvPostal.DataSource = myDataView;
gvPostal.DataBind();

Con esta porción de código se está declarando y creando una "vista" de los datos que nos permite filtrar y ordenar (no necesariamente las dos cosas).

Espero que les sirva.

Para leer fuera de línea: Un Poco de ADO NET - parte 2.pdf (61,69 kb)







Comments (1) -

Diego Joaquin Colina Argentina

Sunday, October 18, 2009 11:25 PM

Diego Joaquin Colina

Gracias Profe, con este post el tema quedo muy claro.-

Add comment




  Country flag
biuquote
  • Comment
  • Preview
Loading