Prctica 3 Acceso a datos con ADO 'NET - PowerPoint PPT Presentation

1 / 49
About This Presentation
Title:

Prctica 3 Acceso a datos con ADO 'NET

Description:

No es exclusivo de aplicaciones Web, pero est pensado teniendo muy en cuenta ese uso ... de formateado, ordenamiento por columnas, manejo de eventos, etc tera ... – PowerPoint PPT presentation

Number of Views:249
Avg rating:3.0/5.0
Slides: 50
Provided by: csarfernn
Category:
Tags: ado | net | acceso | con | datos | etcetera | prctica

less

Transcript and Presenter's Notes

Title: Prctica 3 Acceso a datos con ADO 'NET


1
Práctica 3Acceso a datos con ADO .NET
Comercio Electrónico
  • Universidad de Oviedo

2
Introducción 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 aplicación que sea capaz de leer
    un fichero XML podría trabajar con los datos
    obtenidos a través de ADO .NET
  • Normalmente, lo usaremos para trabajar con bases
    de datos relacionales

3
Bases de datos relacionales
  • Permiten organizar la información en tablas que
    se relacionan entre sí
  • Cada tabla tendrá una serie de registros (las
    filas)
  • Y cada registro estará formado por campos (las
    columnas)

Empleado
4
Elementos involucrados
  • Conexión a la base de datos
  • En primer lugar, es necesario conectarnos a la
    base de datos, mediante un objeto de tipo
    Connection
  • A continuación, se ejecuta la sentencia SQL
  • SQL es un lenguaje para el acceso a bases de
    datos relacionales
  • Puede ser una consulta (SELECT), una inserción
    (INSERT), actualización (UPDATE) o borrado
    (DELETE)
  • En el caso de que sea una consulta, devolverá
    unos resultados que trasformaremos a HTML

5
Panorámica de ADO .NET
6
Espacios de nombres
  • Dónde están 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

7
Espacios de nombres
  • Cada uno de ellos tiene dentro las mismas clases
    básicas
  • Esto permite optimizar la implementación para una
    base de datos concreta (por ejemplo, SQL Server u
    Oracle)
  • OLE DB y ODBC permiten acceder a cualquier base
    de datos
  • No están particularizadas para ninguna
  • Nosotros emplearemos OLE DB
  • Y, por sencillez, emplearemos como base de datos
    Microsoft Access

8
Establecimiento de la conexión
  • Usaremos la clase OleDbConnection
  • Le pasamos una cadena de conexión con los
    parámetros necesarios
  • OleDbConnection conexion new OleDbConnection(
  • "ProviderMicrosoft.JET.OLEDB.4.0Data Source"
  • Server.MapPath(_at_App_Data\libreria.mdb"))
  • En el caso de Microsoft Access, el proveedor es
    siempre el que se indica arriba
  • Data Source indica la ubicación física de la base
    de datos
  • Si la dirección es relativa (no absoluta) a la
    página .aspx actual, hay que hacer uso de
    Server.MapPath

9
Abrir la conexión
  • Para establecer (abrir) la conexión, no basta con
    lo anterior
  • Es necesario llamar al método Open
  • Si no se puede establecer la conexión, se lanzará
    una excepción
  • conexión.Open()

10
Ejercicio
  • Crear una base de datos en Access que sólo tenga
    una tabla
  • Por ejemplo, una tabla Libro que contenga
  • El código del libro (la clave primaria de la
    tabla)
  • El título
  • El precio
  • Crear un WebForm (una página .aspx) que trate de
    establecer una conexión
  • Lo normal es hacerlo en el evento Load de la
    página
  • Si no sale nada, es que la conexión se abrió
    correctamente

11
Ejecución de una consulta
  • Veamos ahora cómo podemos realizar una consulta
    sobre esa conexión que hemos abierto
  • Habrá que hacer una consulta SQL
  • Y obtener los resultados de dicha consulta

12
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 condición
  • Ejemplos
  • SELECT FROM Libro
  • SELECT Titulo FROM Libro
  • WHERE Precio lt 20 AND
  • Autor Pedro Salinas

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

14
DataReader
  • Un objeto de este tipo está siempre conectado a
    la base de datos, hasta que lo cerramos
  • Es decir, mantiene una conexión abierta mientras
    trabajemos con él
  • Sólo permite leer los registros devueltos,
    secuencialmente
  • De uno en uno, y siempre hacia delante, por medio
    de su operación Read

15
DataSet
  • Es una representación en memoria de la base de
    datos completa (múltiples tablas, esquema,
    relaciones y restricciones)
  • Además, es desconectado
  • Una vez que hace la consulta, cierra la conexión
    con la BD
  • Contiene una colección de objetos DataTable, los
    cuales a su vez tienen una colección de DataRow

DataSet
DataTable
DataRow


tablas
filas
16
DataSet
  • Se puede acceder a los elementos de esas dos
    colecciones como se haría con cualquier otra
    colección 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

17
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 conexión), el uso
    de un DataReader puede ser más apropiado, por
    eficiencia (rapidez)
  • A pesar de la mayor flexibilidad del DataSet
  • Este último está más indicado para aplicaciones
    cliente/servidor típicas, donde se están
    intercambiando datos continuamente

18
DataSet
  • Veamos un ejemplo de cómo sería una consulta
    empleando un DataSet (y qué otras clases son
    necesarias entonces).

19
Adaptador
  • Decíamos que el DataSet no sabe nada acerca del
    origen de los datos
  • Se comunica con ellos a través de un DataAdapter

20
DataAdapter
  • Tiene estas cuatro propiedades
  • SelectCommand
  • UpdateCommand
  • InsertCommand
  • DeleteCommand
  • En el caso del OleDbDataAdapter, son de tipo
    OleDbCommand

21
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

22
Ejecutar la consulta
  • Una vez hecho lo anterior, sólo falta ejecutar la
    consulta
  • Es decir, llenar el DataSet con los datos
    obtenidos
  • Se hace con el método Fill del adaptador, al que
    le pasamos como parámetro el DataSet
  • DataSet resultados new DataSet()
  • adaptador.Fill(resultados, "Libro")

23
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"...

24
Ejemplo Listado1.aspx
  • Va añadiendo a una etiqueta (Label) el título de
    cada libro de la tabla, junto con su precio
  • Nótese que no estamos abriendo la conexión
  • Por qué?
  • Porque lo hace el propio DataSet (la abre para
    realizar la consulta y la cierra inmediatamente a
    continuación)

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

26
DataReader
  • Muchas veces, en las aplicaciones Web, no merece
    la pena pagar por la flexibilidad que ofrece
    DataSet
  • Es más difícil de usar y tiene peor rendimiento
    que el DataReader
  • Al igual que el DataSet, el DataReader también se
    usa en conjunción con las clases Command
  • String consultaSql "SELECT FROM Libro"
  • OleDbCommand consulta
  • new OleDbCommand(consultaSql, conexion)
  • OleDbDataReader resultados
  • consulta.ExecuteReader()

27
Procesar los resultados
  • Hay que ir leyendo uno a uno los registros
    devueltos con el método Read de DataReader
  • while (resultados.Read())
  • ... resultados"Titulo"...

28
Ejemplo Listado2.aspx
  • Lo mismo de antes sólo que ahora empleando un
    DataReader
  • Ahora sí hay que abrir (y cerrar) la conexión

29
Ejercicio
  • Modificar el ejemplo anterior para que ahora se
    muestren sólo 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 máximo
  • Y un botón para realizar la consulta
  • Que ahora se hará al pulsar el botón, no al
    cargar la página

30
Controles enlazados a datos
  • Aunque con lo anterior podría bastarnos para
    mostrar páginas dinámicas sencillas, como los
    listados anteriores, ASP .NET proporciona unos
    controles específicos para mostrar datos, más
    sofisticados. Veremos unas nociones sobre ellos.

31
Introducción
  • En enlazado de datos (data binding) consiste en
    asociar un origen de datos a un control
  • Éste se rellenará dinámicamente con los datos de
    aquél
  • Los datos normalmente se asocian a una propiedad
    determinada del control
  • Los controles enlazados (data bound controls)
    constituyen una de las características más
    potentes de ASP .NET para el desarrollo de
    aplicaciones Web

32
Posibles orígenes de datos
  • Es importante hacer notar que sólo las clases de
    ADO .NET para acceso a bases de datos pueden ser
    orígenes 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

33
Sintaxis
  • Una expresión de enlazado a datos es cualquier
    texto encerrado entre lt y gt
  • Un ejemplo muy tonto
  • Label1.Text lt Hola, mundo gt
  • (Nótese el uso de los distintos tipos de
    comillas)
  • Lo mismo, pero en el código HTML de la página
  • ltasplabel runatserver
  • Textlt dropdown.SelectedItem.Text gt /gt

34
Casos más complejos (y útiles)
  • Lo normal es que usemos esta característica para
    enlazar un control de lista o iterativo a uno o
    varios campos (columnas) de datos
  • Controles de lista
  • DropDownList, CheckBoxList, RadioButtomList y
    ListBox
  • Controles iterativos
  • Repeater, DataList y DataGrid

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

36
DataGrid
  • Un control muy potente para mostrar datos
    enlazados en formato tabular
  • Tiene muchísimas capacidades de formateado,
    ordenamiento por columnas, manejo de eventos,
    etcétera
  • Veremos un ejemplo muy sencillo simplemente para
    mostrar cómo se enlazan datos a un control

37
Ejemplo Listado3a.aspx
  • Para enlazar el DataGrid con los resultados de
    ejecutar la consulta, basta con poner las
    siguientes dos líneas
  • Datos.DataSource resultados
  • Datos.DataBind()

38
GridView
  • Aprovecharemos este control para ver una
    característica avanzada de ASP .NET 2.0 la
    posibilidad de extraer la cadena de conexión a la
    base de datos al fichero de configuración
    (Web.config u otro).

39
Cadena de conexión
  • En el Web.config pondríamos algo como esto
  • ltconnectionStringsgt
  • ltadd name"Libreria" connectionString"Provider
    Microsoft.Jet.OLEDB.4.0Data SourcequotDataDir
    ectory\Libreria.mdbquot"
  • providerName"System.Data.OleDb" /gt
  • lt/connectionStringsgt
  • Donde DataDirectory apunta a nuestro directorio
    App_Data
  • De esta manera, funcionará tanto en local, como
    en el servidor o en cualquier otra máquina

40
Acceder a la cadena de conexión
  • Desde el código (C)
  • string connectionString
  • ConfigurationManager.ConnectionStrings
  • Libreria".ConnectionString

41
Acceder a la cadena de conexión
  • También podemos crear un origen de datos en la
    página .aspx
  • ltaspSqlDataSource ID"Libreria" runat"server"
  • ConnectionString"lt ConnectionStringsLibreria
    gt"
  • ProviderName"lt ConnectionStringsLibreria.Prov
    iderName gt"
  • SelectCommand"SELECT CodigoLibro, Titulo,
    Precio FROM Libro " /gt
  • En ese caso
  • ltaspGridView ID"ListadoLibros" runat"server"
    DataSourceID"Libreria" AutoGenerateColumns"True"
    gt
  • lt/aspGridViewgt

42
Ejemplo Listado3b.aspx
  • Veamos cómo añadir un control GridView sin
    escribir una sola línea de código C

43
Repeater
44
Repeater
  • Este control nos da total libertad de formateado
    HTML
  • Somos nosotros los encargados de decirle cómo 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

45
Plantillas
  • HeaderTemplate
  • Se visualiza una única vez, antes de cualquier
    otra fila
  • No puede contener datos enlazados
  • ItemTemplate
  • La más 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

46
Acceder a los datos enlazados
  • La forma habitual es, en la página .aspx
  • lt Eval(Titulo) gt
  • En ASP .NET 1.0 la sintaxis era mucho más
    farragosa (mediante el método estático
    DataBinder.Eval)
  • lt DataBinder.Eval(Container.DataItem,
    Titulo) gt

47
Ejemplo Listado4.aspx
  • Lo de siempre pero con un Repeater

48
Ejercicio
  • Modificar el ejemplo anterior para que el título
    de cada libro sea un enlace a otra página .aspx
    de la forma
  • MostrarLibro.aspx?Codigoltcódigo del librogt
  • Úsese un control HyperLink
  • Y el método string.Concat para concatenar la
    parte fija del URL del enlace con el código de
    cada libro

49
Más información
  • What's New in ASP.NET Data Access
  • http//msdn2.microsoft.com/en-us/library/06t2w7da(
    VS.80).aspx
Write a Comment
User Comments (0)
About PowerShow.com