Professional Documents
Culture Documents
NET
Comercio Electrnico
Universidad de Oviedo
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
Empleado
IDEmpleado 1 2 3 Nombre Ana Jorge Luca PrimerApellido Gonzlez Fernndez Palacios SegundoApellido Gil Garca Salvador Antiguedad 01/03/2001 10/09/1998 01/05/2003
3
Elementos involucrados
En el caso de que sea una consulta, devolver unos resultados que trasformaremos a HTML
4
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
Espacios de nombres
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
Ejercicio
Crear una base de datos en Access que slo tenga una tabla
Por ejemplo, una tabla Libro que contenga:
El cdigo del libro (la clave primaria de la tabla) El ttulo El precio
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
10
11
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
12
Resultados
ADO .NET proporciona dos tipos de objetos para acceder a los resultados de una consulta:
DataReader DataSet
13
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
14
DataSet
Es una representacin en memoria de la base de datos completa (mltiples tablas, esquema, relaciones y restricciones) Adems, es desconectado
Contiene una coleccin de objetos DataTable, los cuales a su vez tienen una coleccin de DataRow
DataSet
*
tablas
DataTable
*
filas
DataRow
15
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
16
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
17
DataSet
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
19
DataAdapter
20
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);
21
Ejecutar la consulta
22
{
... fila["Titulo"]... }
23
Ejemplo: Listado1.aspx
Va aadiendo a una etiqueta (Label) el ttulo de cada libro de la tabla, junto con su precio Ntese que no estamos abriendo la conexin
Por qu?
Porque lo hace el propio DataSet (la abre para realizar la consulta y la cierra inmediatamente a continuacin)
24
DataReader
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();
26
Hay que ir leyendo uno a uno los registros devueltos con el mtodo Read de DataReader
while (resultados.Read())
{ ... resultados["Titulo"]...
27
Ejemplo: Listado2.aspx
28
Ejercicio
Modificar el ejemplo anterior para que ahora se muestren slo los libros con un precio menor que el indicado por el usuario
Habr que incluir un campo de texto para que el usuario introduzca el precio mximo Y un botn para realizar la consulta
Que ahora se har al pulsar el botn, no al cargar la pgina
29
Introduccin
Los controles enlazados (data bound controls) constituyen una de las caractersticas ms potentes de ASP .NET para el desarrollo de aplicaciones Web
31
32
Sintaxis
Una expresin de enlazado a datos es cualquier texto encerrado entre <%# y %> Un ejemplo muy tonto:
33
Controles iterativos:
Repeater, DataList y DataGrid
34
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
36
Ejemplo: Listado3a.aspx
Para enlazar el DataGrid con los resultados de ejecutar la consulta, basta con poner las siguientes dos lneas:
Datos.DataSource = resultados; Datos.DataBind();
37
GridView
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
39
40
En ese caso:
<asp:GridView ID="ListadoLibros" runat="server" DataSourceID="Libreria" AutoGenerateColumns="True">
</asp:GridView>
41
Ejemplo: Listado3b.aspx
Veamos cmo aadir un control GridView sin escribir una sola lnea de cdigo C#
42
Repeater
Repeater
44
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
45
En ASP .NET 1.0 la sintaxis era mucho ms farragosa (mediante el mtodo esttico DataBinder.Eval):
<%# DataBinder.Eval(Container.DataItem, Titulo) %>;
46
Ejemplo: Listado4.aspx
47
Ejercicio
Modificar el ejemplo anterior para que el ttulo de cada libro sea un enlace a otra pgina .aspx de la forma:
MostrarLibro.aspx?Codigo=<cdigo del libro>
48
Ms informacin
49