You are on page 1of 44

Carlos Lpez Bernal E-mail: clopezb_117@yahoo.

com

Introduccin a ADO .NET

ADO .NET es la parte de la plataforma .NET que se encarga del acceso a datos
No es exclusivo de aplicaciones Web, pero est

pensado teniendo muy en cuenta ese uso Internamente, usa XML para transmitir los datos
As, cualquier aplicacin que sea capaz de leer un

fichero XML podra trabajar con los datos obtenidos a travs de ADO .NET

Normalmente, lo usaremos para trabajar con bases de datos relacionales

Bases de datos relacionales


Permiten organizar la informacin en tablas que se relacionan entre s Cada tabla tendr una serie de registros (las filas) Y cada registro estar formado por Empleado camposNombre (las columnas) IDEmpleado PrimerApellido SegundoApellido Antiguedad

1 2 3 Ana Jorge Luca Gonzlez Fernndez Palacios Gil Garca Salvador 01/03/2001 10/09/1998 01/05/2003

Elementos involucrados

Conexin a la base de datos


En primer lugar, es necesario conectarnos a la base

de datos, mediante un objeto de tipo Connection

A continuacin, se ejecuta la sentencia SQL


SQL es un lenguaje para el acceso a bases de datos

relacionales
Puede ser una consulta (SELECT), una insercin

(INSERT), actualizacin (UPDATE) o borrado (DELETE)

En el caso de que sea una consulta, devolver unos resultados que trasformaremos a HTML

Panormica de ADO .NET

Espacios de nombres

Dnde estn las clases necesarias para trabajar con ADO .NET?
De forma general, en el espacio de nombres
System.Data

Luego, depende del tipo de base de datos

que vayamos a utilizar


Espacio de nombres
System.Data.SqlClient System.Data.OleDb System.Data.Odbc System.Data.OracleClient

Base de datos Microsoft SQL Server OLE DB ODBC Oracle

Espacios de nombres

Cada uno de ellos tiene dentro las mismas clases bsicas


Esto permite optimizar la implementacin

para una base de datos concreta (por ejemplo, SQL Server u Oracle)

OLE DB y ODBC permiten acceder a cualquier base de datos


No estn particularizadas para ninguna

Establecimiento de la conexin
Usaremos la clase OleDbConnection Le pasamos una cadena de conexin con los parmetros necesarios

OleDbConnection conexion = new OleDbConnection( "Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + Server.MapPath(@App_Data\libreria.mdb"));

En el caso de Microsoft Access, el proveedor es siempre el que se indica arriba Data Source indica la ubicacin fsica de la base de datos
Si la direccin es relativa (no absoluta) a la pgina .aspx actual, hay que hacer uso de Server.MapPath

Abrir la conexin
Para establecer (abrir) la conexin, no basta con lo anterior Es necesario llamar al mtodo Open

Si no se puede establecer la conexin, se

lanzar una excepcin


conexin.Open();

Ejercicio

De la BD Emergentes realice las consultas para los ejercicios del 1 al 5 Crear un WebForm (una pgina .aspx) que trate de establecer una conexin
Lo normal es hacerlo en el evento Load de

la pgina Si no sale nada, es que la conexin se abri correctamente

Ejecucin de una consulta


Veamos ahora cmo podemos realizar una consulta sobre esa conexin que hemos abierto Habr que hacer una consulta SQL Y obtener los resultados de dicha consulta

Sentencia SELECT de SQL


Obtendr los datos pedidos que cumplan las condiciones especificadas El formato general es
SELECT campo1, campo2, campo3... FROM tabla1, tabla2... WHERE condicin

Ejemplos:
SELECT * FROM Libro SELECT Titulo FROM Libro WHERE Precio < 20 AND Autor = Pedro Salinas

Resultados

ADO .NET proporciona dos tipos de objetos para acceder a los resultados de una consulta:
DataReader DataSet

DataReader

Un objeto de este tipo est siempre conectado a la base de datos, hasta que lo cerramos
Es decir, mantiene una conexin abierta

mientras trabajemos con l

Slo permite leer los registros devueltos, secuencialmente


De uno en uno, y siempre hacia delante, por

medio de su operacin Read

DataSet
Es una representacin en memoria de la base de datos completa (mltiples tablas, esquema, relaciones y restricciones) Adems, es desconectado

Una vez que hace la consulta, cierra la conexin

con la BD

Contiene una coleccin de objetos DataTable, los cuales a su vez tienen una coleccin de
DataRow
DataSet

*
tablas

DataTable

*
filas

DataRow

DataSet

Se puede acceder a los elementos de esas dos colecciones como se hara con cualquier otra coleccin en C#
Con un bucle foreach

Mediante un ndice
O con la clave primaria (para ir a las filas) o

el nombre del campo (para ir a un campo de una fila concreta)

Gracias a su naturaleza desconectada, un DataSet se puede enviar por la red como un flujo XML

DataSet o DataReader?

Dada la naturaleza de las aplicaciones Web (donde lo habitual es hacer una consulta, transformar esos datos a HTML y cerrar la conexin), el uso de un DataReader puede ser ms apropiado, por eficiencia (rapidez)
A pesar de la mayor flexibilidad del DataSet

Este ltimo est ms indicado para

aplicaciones cliente/servidor tpicas, donde se estn intercambiando datos continuamente

Veamos un ejemplo de cmo sera una consulta empleando un DataSet (y qu otras clases son necesarias entonces).

Adaptador

Decamos que el DataSet no sabe nada acerca del origen de los datos
Se comunica con ellos a travs de un
DataAdapter

DataAdapter

Tiene estas cuatro propiedades:


SelectCommand
UpdateCommand InsertCommand DeleteCommand

En el caso del OleDbDataAdapter, son de tipo OleDbCommand

OleDbCommand

Creamos un objeto de este tipo con la sentencia SQL que queramos ejecutar:
String consultaSql = "SELECT * FROM Libro"; OleDbCommand consulta = new OleDbCommand(consultaSql, conexion);

Y se lo asignamos a la propiedad correspondiente del adaptador:


OleDbDataAdapter adaptador = new OleDbDataAdapter(); adaptador.SelectCommand = consulta;

Ejecutar la consulta

Una vez hecho lo anterior, slo falta ejecutar la consulta


Es decir, llenar el DataSet con los datos

obtenidos Se hace con el mtodo Fill del adaptador, al que le pasamos como parmetro el
DataSet

DataSet resultados = new DataSet(); adaptador.Fill(resultados, "Libro");

Procesar los resultados


Recorremos las colecciones antes mencionadas, generando la salida HTML deseada Por ejemplo:

foreach (DataRow fila in


resultados.Tables["Libro"].Rows)

{
... fila["Titulo"]... }

Veamos ahora el mismo ejemplo pero empleando un DataReader en vez de un DataSet.

DataReader

Muchas veces, en las aplicaciones Web, no merece la pena pagar por la flexibilidad que ofrece DataSet
Es ms difcil de usar y tiene peor rendimiento que el DataReader

Al igual que el DataSet, el DataReader tambin se usa en conjuncin con las clases Command
String consultaSql = "SELECT * FROM Libro";
OleDbCommand consulta = new OleDbCommand(consultaSql, conexion);

OleDbDataReader resultados = consulta.ExecuteReader();

Procesar los resultados

Hay que ir leyendo uno a uno los registros devueltos con el mtodo Read de DataReader
while (resultados.Read()) { ... resultados["Titulo"]... }

Aunque con lo anterior podra bastarnos para mostrar pginas dinmicas sencillas, como los listados anteriores, ASP .NET proporciona unos controles especficos para mostrar datos, ms sofisticados. Veremos unas nociones sobre ellos.

Introduccin

En enlazado de datos (data binding) consiste en asociar un origen de datos a un control


ste se rellenar dinmicamente con los datos de

aqul Los datos normalmente se asocian a una propiedad determinada del control

Los controles enlazados (data bound controls) constituyen una de las caractersticas ms potentes de ASP .NET para el desarrollo de aplicaciones Web

Posibles orgenes de datos


Es importante hacer notar que slo las clases de ADO .NET para acceso a bases de datos pueden ser orgenes de datos Un control de este tipo se puede enlazar a:

Colecciones normales de .NET Arrays, diccionarios, listas enlazadas, tablas hash, pilas, colas Estructuras de datos definidas por el usuario Que implementen la interfaz ICollection Clases orientadas a bases de datos, como DataTable o
DataSet

Sintaxis
Una expresin de enlazado a datos es cualquier texto encerrado entre <%# y %> Un ejemplo muy tonto:
Label1.Text = <%# Hola, mundo %>;
(Ntese el uso de los distintos tipos de comillas)

Lo mismo, pero en el cdigo HTML de la pgina:


<asp:label runat=server

Text=<%# dropdown.SelectedItem.Text %> />

Casos ms complejos (y tiles)


Lo normal es que usemos esta caracterstica para enlazar un control de lista o iterativo a uno o varios campos (columnas) de datos Controles de lista:

DropDownList, CheckBoxList, RadioButtomList

ListBox

Controles iterativos:
Repeater, DataList

y DataGrid

Aunque este control sigue funcionando, en ASP .NET 2.0 es sustituido por otro ms potente, el GridView. Lo sigo comentando simplemente por si alguien sigue trabajando con ASP 1.0 (Visual Studio 2003, en vez del 2005).

DataGrid
Un control muy potente para mostrar datos enlazados en formato tabular Tiene muchsimas capacidades de formateado, ordenamiento por columnas, manejo de eventos, etctera Veremos un ejemplo muy sencillo simplemente para mostrar cmo se enlazan datos a un control

Aprovecharemos este control para ver una caracterstica avanzada de ASP .NET 2.0: la posibilidad de extraer la cadena de conexin a la base de datos al fichero de configuracin (Web.config u otro).

Cadena de conexin

En el Web.config pondramos algo como esto:


<connectionStrings> <add name="Libreria" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=&quot;|DataDirectory|\Libreria.mdb&quot;" providerName="System.Data.OleDb" /> </connectionStrings>

Donde |DataDirectory| apunta a nuestro directorio App_Data


De esta manera, funcionar tanto en local, como en

el servidor o en cualquier otra mquina

Acceder a la cadena de conexin

Desde el cdigo (C#):


string connectionString = ConfigurationManager.ConnectionStrings [Libreria"].ConnectionString;

Acceder a la cadena de conexin

Tambin podemos crear un origen de datos en la pgina .aspx:


<asp:SqlDataSource ID="Libreria" runat="server" ConnectionString="<%$ ConnectionStrings:Libreria %>" ProviderName="<%$ ConnectionStrings:Libreria.ProviderName %>" SelectCommand="SELECT [CodigoLibro], [Titulo], [Precio] FROM [Libro] " />

En ese caso:
<asp:GridView ID="ListadoLibros" runat="server" DataSourceID="Libreria" AutoGenerateColumns="True">

</asp:GridView>

Repeater

Este control nos da total libertad de formateado HTML


Somos nosotros los encargados de decirle

cmo se tiene que mostrar, mediante una serie de plantillas predefinidas Es til cuando no nos sirve el formato tabular del GridView, donde se muestra siempre una fila por registro devuelto

Plantillas

HeaderTemplate
Se visualiza una nica vez, antes de cualquier otra fila

No puede contener datos enlazados

ItemTemplate
La ms habitual Determina el formato de salida de cada fila del origen de datos

AlternatingItemTemplate
Lo mismo para las filas alternas (por si queremos darles otro

formato)

SeparatorTemplate
Lo que queremos que aparezca entre cada fila No puede tener datos enlazados

FooterTemplate
Una nica vez, al final de la tabla Tampoco puede contener datos enlazados

Acceder a los datos enlazados

La forma habitual es, en la pgina .aspx:


<%# Eval(Titulo) %>

En ASP .NET 1.0 la sintaxis era mucho ms farragosa (mediante el mtodo esttico DataBinder.Eval):
<%# DataBinder.Eval(Container.DataItem, Titulo) %>;

ODBC: Driver={SQL Server}; Server=your Server name; Database=DBname; Uid=your uid; Pwd='your password'; OLE DB, OleDbConnection (.NET): Provider=sqloledb; Data Source= your Server name; Initial Catalog= DBname; User ID=your uid; Password='your password'; SqlConnection (.NET): Data Source=your server name; Initial Catalog=DB name; User ID=your uid; Password='your password';

Ms informacin

What's New in ASP.NET Data Access


http://msdn2.microsoft.com/en-us/library/06t2w7da(VS.80).aspx

Gracias

You might also like