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 1

Con esta publicación voy a iniciar una  serie de publicaciones sobre esta cosa que llaman ADO.NET.

Para comenzar hay que ver un poquito (el resto se los dejo a Uds. que en wikipedia pueden hallar bastante o mejor en MSDN) sobre lo que es ADO.NET.

ADO.NET es una arquitectura de clases (objetos) que se encuentran en el Microsoft Framework 2.0 y superiores que nos permiten acceder a datos almacenados en algún motor de base de datos (también nos permite acceder a datos en formato XML pero eso es otro tema).

En algunos lugares van a encontrar que ADO.NET es la evolución de ADO (que es lo que había en la versión 1.0 del Framework), en mi opinión ADO.NET es otra "especie" si de evolución estamos hablando. ADO son las siglas de ActiveX Data Objects, o sea un componente de software que se descarga en la máquina del cliente y permite acceder a datos, en cambio con ADO.NET no se descarga nada en la máquina del usuario. También van a encontrar que todo esto tiene su origen en DAO - Data Access Object que me parece más razonable (un conjunto de objetos para acceder a datos).

 

Para tener una idea de cómo funciona ADO.NET veamos el siguiente esquema:

Podemos ver que con estos componentes es posible que una aplicación acceda a los datos almacenadas en distintos motores de base de datos, esto es así para poder aprovechar al máximo las ventajas que cada motor de base de datos tiene. Observen también que la arquitectura ADO.NET facilita un mecanismo "Disconnected Objects" esto nos permite manipular los datos de manera desconectada, lo que es muy bueno cuando se trata de aplicaciones Web, ya que no podemos darnos el lujo de mantener miles de conexiones abiertas al motor de base de datos de un sitio en particular, lo que inevitablemente lleva a una programación más cuidadosa a la hora de actualizar registros (para discutir eso me van a tener que contratar Surprised).

Estos componentes que nos permiten conectarnos a diferentes motores de bases de datos son lo que llamaremos "connections", otro componente importante dentro de la arquitectura ADO.NET es el que llamaremos "adapter" y nos va a permitir manipular los datos desde la aplicación; el siguiente esquema muestra como lo hace:

Observen que nuestros objetos "desconectados" utilizan un "adaptador" para acceder a la fuente de datos. También se pueden utilizar objetos "conectados" que en las siguientes publicaciones indicaré cuando conviene usar uno u otro objeto. Pero ahora nos concentremos en la existencia de un objeto que nos permite acceder a la base de datos y realizar las operaciones necesarias (INSERT, SELECT, UPDATE, DELETE) lo que se conoce como operaciones CRUD (Create, Retrieve, Update and Delete); incluso se pueden realizar transacciones controlado la completitud, coherencia e integridad de los datos.

Ahora apareció el otro componente que hallamos en la arquitectura ADO.NET el "conjunto de datos" o "dataset", que resulta ser una representación de la base de datos en memoria. Esto significa que un dataset puede contener tablas, vistas, relaciones para representar una parte de la base de datos; digo una parte porque un componente de una aplicación utiliza solo una parte de la base de datos difícilmente una página web acceda a todos los elementos que están en la base de datos; diferentes páginas accederán a diferentes partes de la base de datos de modo que manipularemos diferentes "conjuntos de datos" o datasets a medida que haga falta.

 


Veamos un simple ejercicio para analizar lo que se puede hacer con ADO.NET. Para ello vamos a necesitar una base de datos y por supuesto un motor de base de datos.

Los que hicieron solamente la instalación del Visual Studio tienen en su equipo el SQL Server Express Edition, pero no pueden administrarlo porque seguramente no instalaron la consola de administración. Eso lo pueden bajar de: Microsoft SQL Server Management Studio Express (SSMSE) para el SQL Server 2005 o de Microsoft SQL Server 2008 Management Studio Express para el SQL Server 2008, tengan cuidado con seleccionar el idioma y la versión (x86 o x64) adecuadas para su instalación. Una véz que lo tiene instalado pueden bajarse el fabuloso ejemplo AdventureWorks que es enorme o pueden bajarse estos scripts (northwind_pubs.zip (277,90 kb)) con los que van a tener las viejas y queridas Northwind y Pubs (bases de datos de juguete que sirven para aprender). Con el SQL Server Managemment se conectan a su instancia de motor de base de datos y ejecutan los scripts para crear ambas bases.

Bien, con las bases creadas pueden iniciar el Visual Studio crear una solución y agregar un proyecto del tipo aplicación web o un sitio web (el que más les guste); se van a encontrar con Default.aspx que es la página por defecto que se utiliza para "levantar" un sitio web o aplicación web, que por ahora la dejamos como está.

Vamos a buscar la pestaña del "Explorador de Servidores" si no está la habilitan desde el menú ver, y donde dice conexiones de datos (Data Connections) con el botón derecho podemos agregar una conexión. Les va a pedir el nombre del servidor, en el DropDownList seguramente les va a aparecer el nombre de su instancia del motor de base de datos, caso contrario pongan .\SQLEXPRESS que es la forma en que normalmente se identifica (los que tengan un motor mejor ya sabrán como acceder a él). En la parte de autenticación tienen que elegir la forma en que se identifican y acceden al motor de base de datos y luego seleccionan la base de datos para la cual están creando la conexión (puede ser NorthWind o Pubs, la que les guste).

Ahora volvemos a la página Default.aspx y la pasamos al modo de diseño, vamos a la pestaña del explorador de servidores y expandimos la lista de tablas de la base de datos a la que nos conectamos y seleccionamos una de las tablas para arrastrarla y "tirarla" en la página web; en unos segundos (dependiendo de la velocidad de su máquina) el Visual Studio genera todo el código necesario para mostrarnos un GridView con el cuál podremos navegar por la tabla elegida.

Así como queda pueden ver la página en el explorador o ejecutar la aplicación con F5 (para depurar) o Ctrl F5 para ejecutar directamente.

En mi caso obtuve lo siguiente:

   1:  <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm8.aspx.cs" Inherits="ADO2.WebForm8" %>
   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="GridView1" runat="server" AutoGenerateColumns="False" 
  14:          DataKeyNames="au_id" DataSourceID="SqlDataSource1" 
  15:          EmptyDataText="There are no data records to display.">
  16:          <Columns>
  17:            <asp:BoundField DataField="au_id" HeaderText="au_id" ReadOnly="True" 
  18:              SortExpression="au_id" />
  19:            <asp:BoundField DataField="au_lname" HeaderText="au_lname" 
  20:              SortExpression="au_lname" />
  21:            <asp:BoundField DataField="au_fname" HeaderText="au_fname" 
  22:              SortExpression="au_fname" />
  23:            <asp:BoundField DataField="phone" HeaderText="phone" SortExpression="phone" />
  24:            <asp:BoundField DataField="address" HeaderText="address" 
  25:              SortExpression="address" />
  26:            <asp:BoundField DataField="city" HeaderText="city" SortExpression="city" />
  27:            <asp:BoundField DataField="state" HeaderText="state" SortExpression="state" />
  28:            <asp:BoundField DataField="zip" HeaderText="zip" SortExpression="zip" />
  29:            <asp:CheckBoxField DataField="contract" HeaderText="contract" 
  30:              SortExpression="contract" />
  31:          </Columns>
  32:        </asp:GridView>
  33:        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
  34:          ConnectionString="<%$ ConnectionStrings:pubsConnectionString1 %>" 
  35:          DeleteCommand="DELETE FROM [authors] WHERE [au_id] = @au_id" 
  36:          InsertCommand="INSERT INTO [authors] ([au_id], [au_lname], [au_fname], [phone], [address], [city], [state], [zip], [contract]) VALUES (@au_id, @au_lname, @au_fname, @phone, @address, @city, @state, @zip, @contract)" 
  37:          ProviderName="<%$ ConnectionStrings:pubsConnectionString1.ProviderName %>" 
  38:          SelectCommand="SELECT [au_id], [au_lname], [au_fname], [phone], [address], [city], [state], [zip], [contract] FROM [authors]" 
  39:          UpdateCommand="UPDATE [authors] SET [au_lname] = @au_lname, [au_fname] = @au_fname, [phone] = @phone, [address] = @address, [city] = @city, [state] = @state, [zip] = @zip, [contract] = @contract WHERE [au_id] = @au_id">
  40:          <DeleteParameters>
  41:            <asp:Parameter Name="au_id" Type="String" />
  42:          </DeleteParameters>
  43:          <InsertParameters>
  44:            <asp:Parameter Name="au_id" Type="String" />
  45:            <asp:Parameter Name="au_lname" Type="String" />
  46:            <asp:Parameter Name="au_fname" Type="String" />
  47:            <asp:Parameter Name="phone" Type="String" />
  48:            <asp:Parameter Name="address" Type="String" />
  49:            <asp:Parameter Name="city" Type="String" />
  50:            <asp:Parameter Name="state" Type="String" />
  51:            <asp:Parameter Name="zip" Type="String" />
  52:            <asp:Parameter Name="contract" Type="Boolean" />
  53:          </InsertParameters>
  54:          <UpdateParameters>
  55:            <asp:Parameter Name="au_lname" Type="String" />
  56:            <asp:Parameter Name="au_fname" Type="String" />
  57:            <asp:Parameter Name="phone" Type="String" />
  58:            <asp:Parameter Name="address" Type="String" />
  59:            <asp:Parameter Name="city" Type="String" />
  60:            <asp:Parameter Name="state" Type="String" />
  61:            <asp:Parameter Name="zip" Type="String" />
  62:            <asp:Parameter Name="contract" Type="Boolean" />
  63:            <asp:Parameter Name="au_id" Type="String" />
  64:          </UpdateParameters>
  65:        </asp:SqlDataSource>
  66:      
  67:      </div>
  68:      </form>
  69:  </body>
  70:  </html>

Los invito a "jugar" con lo que obtienen, maquillar un poco el GridView, revisar y entender cómo funciona el componente SqlDataSource, volver a hacerlo probando todas las opciones para que de ese modo podamos entender mejor las publicaciones que vienen.

Espero que les sirva.

Para leer fuera de línea: Un Poco de ADO NET - parte 1.pdf (110,30 kb)







Add comment




  Country flag
biuquote
  • Comment
  • Preview
Loading