You are on page 1of 15

Desarrollo de Aplicaciones

con Sistemas de Bases de Datos

Desarrollo de Aplicaciones
Con Sistemas de Bases de Datos:
Sesión 3.3: ADO.NET 2.0

Departamento de Tecnologías y Sistemas de Información


Escuela Superior Informática – Ciudad Real
Ingeniería Técnica en Informática de Gestión
Curso 2007/08
Ismael Caballero, Marcela Genero

Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 1

Desarrollo de Aplicaciones
Contenidos con Sistemas de Bases de Datos

• Historia

• Clases Básicas

• Factoría Abstracta

Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 2

1
ADO.NET Desarrollo de Aplicaciones
Historia con Sistemas de Bases de Datos

• ODBC ( Open DataBase Connectivity )


– Proporciona una interfaz simple para acceder
a numerosos sistemas de bases de datos.
– Actúa como un wrapper que encapsula el
acceso a los datos.
– Permite a los desarrolladores escribir
aplicaciones independientemente del SGBDR.
– ODBC no da soporte para LDAP o datos
semiestructurados.
– Sólo puede manipular Sentencias SQL.
Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 3

ADO.NET Desarrollo de Aplicaciones


Historia (II) con Sistemas de Bases de Datos

• OLE-DB (Object Linking & Embedding DB)


– Representa el siguiente paso para acercarse
a API basados en el modelo COM para la
migración de aplicaciones de 32 bits
– Es más limpio y ofrece acceso a datos más
eficiente que ODBC
– Soporta el modelo relacional y el jerárquico.

Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 4

2
ADO.NET Desarrollo de Aplicaciones
Historia (III) con Sistemas de Bases de Datos

• Consumidores de Datos
– DAO (Data Acces Objects)
• Primer intento de MS de crear un API para
consumidores de datos.
• Tenía algunas ventajas sobre ODBC.
• Tenía un rendimiento muy bajo.
– RDO (Remote Data Objects)
• Supera las limitaciones de DAO con ODBC
• No sustituyó a DAO, sino que convivieron durante
algún tiempo por motivos comerciales

Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 5

ADO.NET Desarrollo de Aplicaciones


Historia (IV) con Sistemas de Bases de Datos

• ADO (ActiveX Data Objects)


– Inicialmente constituía un API de alto nivel
para trabajar con OLE-DB
– ADO se desarrolló para sustituir a DAO y RDO
– Simplifica enormemente la secuencia de
acciones que los programadores tenían que
hacer para acceder a los datos.

Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 6

3
ADO.NET Desarrollo de Aplicaciones
Historia (V) con Sistemas de Bases de Datos

• ADO.NET
– Es un nuevo modelo (que no una revisión de ADO)
escrito para .NET
– Soporta la comunicación con fuentes de datos a
través de ODBC y de OLE-DB, pero además deja
abierta la posibilidad de manejar el API de cualquier
otro proveedor
• Mayor rendimiento.
– Proporcionaba cinco objetos básicos:
• Connection, Command, DataReader, DataSet y DataAdapter.
– Proporcionaba acceso desconectados a datos, de
modo que el servidor pudiera atender a otras
peticiones.
– Proporciona acceso a Datos Semiestructurados como
XML.
Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 7

ADO.NET Desarrollo de Aplicaciones


Historia (VI) con Sistemas de Bases de Datos

• ADO.NET 2.0
– Basada en ADO.NET se han añadido nuevas
características para hacer más fácil la tarea de
los programadores.
– Tiene compatibilidad hacia atrás con ADO.NET
– Se ha mejorado considerablemente el
rendimiento con respecto a ADO.NET
– Fuentes de Datos Posibles:
• SiteMap, Objetos de Negocio, Datos en XML, Datos
Access, Proveedores de Datos
Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 8

4
ADO.NET Desarrollo de Aplicaciones
Historia (VII) con Sistemas de Bases de Datos

Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 9

ADO.NET Desarrollo de Aplicaciones


Clases Básicas con Sistemas de Bases de Datos

• Clases Básicas:
– Disconnected
• Proporciona la estructura básica de ADO.NET. Eg. DataTable
• Los objetos de estas clases son capaces de almacenar datos
independientemente del proveedor específico
– Shared
• Forman la clase base para los proveedores de datos y son
compartidas por todos ellos.
– DataProvider
• Están definidas para trabajar con distintos tipos de
proveedores. Eg. SqlClient trabaja sólo con SQL Server.

Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 10

5
ADO.NET Desarrollo de Aplicaciones
Clases Básicas (II) con Sistemas de Bases de Datos

• Operativa:
1. Se crea un objeto Connection y se le pasa todos los
datos necesarios para establecer la conexión
(cadena conexión)
2. Se crea un objeto Command para almacenar la
consulta que se pretende realizar. Hay que decidir
qué devuelve y en qué tipo de objeto se almacena
y si se quiere guardar para utilizarlo después
usando un DataAdapter para rellenar un DataSet o
un DataReader (sólo lectura y sólo hacia delante)
3. Vincular el resultado a un control de servidor como
DataView o DataGrid.
Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 11

ADO.NET Desarrollo de Aplicaciones


Clases Básicas (III) con Sistemas de Bases de Datos

• Namespaces del API de ADO.NET


– System.Data
• Es el núcleo de ADO.NET.
• Contiene las clases usadas por todos los proveedores de
datos.
• Estas clases representan tablas, columnas, filas y DataSet
• Contiene Interfaces para independizar la aplicación del
proveedor como IDbCommand, IDbConnection,
IDBDataAdapter, basadas en el patrón Factoría Abstracta
– System.Data.Common
• Define clases comunes que son usadas como clases bases
por los proveedores de datos: DbConnection,
DbDataAdapter, …
– System.Data.OleDB
• Define las clases que trabajan con OLE-DB como
OleDbConnection, OleDbDataAdapter.
Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 12

6
ADO.NET Desarrollo de Aplicaciones
Clases Básicas (IV) con Sistemas de Bases de Datos

– System.Data.Odbc
• Para trabajar con ODBC: incluye OdbcConnection,
OdbcCommand, …
– System.Data.SqlClient
• SqlConnection, SqlCommand, …
– System.Data.Oracle
• OracleConnection, OracleCommand, …
– System.Data.SqlType.
• Definen unas cuantas clases que representan
tipos de datos específicos para SQL Server

Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 13

ADO.NET Desarrollo de Aplicaciones


Clases Básicas (V) con Sistemas de Bases de Datos

• Connection
– Crea un enlace con una fuente de datos.
– Parámetros/Propiedades Habituales para
SQLConnection
• DataSource
– (Sólo Lectura:RO) Nombre de la instancia de SQL Server
• DataBase
– (RO) Nombre de la BBDD usada
• State
– (RO) Devuelve el estado actual de la conexión:
» Broken, Closed, Connecting, Executing, Fetching, Open
• ConnectionString
– (RO) Cadena de Conexión para comunicarse con la Base de
Datos

Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 14

7
ADO.NET Desarrollo de Aplicaciones
Clases Básicas (VI) con Sistemas de Bases de Datos

• Command
– Usa un objeto Connection para ejecutar
consultas SQL (consultas normales,
procedimientos almacenados o acceso directo
a las tablas mediante ADO.NET)
– Si se usa una consulta SQL Select el resultado
se puede almacenar en un DataSet o en un
DataReader según las necesidades del
programador.
– Tiene varios métodos Execute para distintas
acciones.
Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 15

ADO.NET Desarrollo de Aplicaciones


Clases Básicas (VII) con Sistemas de Bases de Datos

• Command (II)
– Propiedades
• CommandText
– (RW) Fija la consulta que se desea ejecutar
• CommandTimeout
– (RW) Número de segundos que se puede esperar hasta que se
ejecute la consulta. Por defecto 30 segundos.
• CommandType
– (RW) Indica el modo en el que el CommandText debe ser
interpretado:
– Valores: StoreProcedure, TableDirect, Text
• Connection
– (RW) Devuelve o asigna el objeto conexión que debería ser
usado por el comando.

Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 16

8
ADO.NET Desarrollo de Aplicaciones
Clases Básicas (VIII) con Sistemas de Bases de Datos

• Command (III)
– Métodos Execute
• ExecuteNonQuery
– Ejecuta el comando y devuelve el número de filas afectadas
• ExecuteReader
– Ejecuta el comando y devuelve un DataReader (RO-Sólo hacia
delante)
• ExecuteRow
– Ejecuta el comando y devuelve un SqlRecord (una sola fila)
• ExecuteScalar
– Ejecuta la consulta y devuelve la primera fila de la primera
columna como un objeto genérico
• ExecuteXmlReader
– Ejecuta el comando y devuelve un objeto de la clase
XmlReader

Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 17

ADO.NET Desarrollo de Aplicaciones


Clases Básicas (IX) con Sistemas de Bases de Datos

• DataReader
– Es un objeto de sólo lectura y sólo hacia
delante (no se puede “rebobinar”)
– Necesita una conexión constante con la base
de datos, por lo que se debe cerrar cuando
se acabe:
• CommandBehavior.CloseConnection
• DataReader.Close
– No se puede usar su constructor para
instanciarlo, teniendo que llamar al
ExecuteReader de un Command
Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 18

9
ADO.NET Desarrollo de Aplicaciones
Clases Básicas (X) con Sistemas de Bases de Datos

• Ejemplo Consulta Selección:


<%@ Page Language =“C#” %>
<%@ Import Namespace = “System.Data” %>
<%@ Import Namespace = “System.Data.SqlClient” %>
<%@ Import Namespace = “System.Configuration” %>

<scritpt runat = “server”>


protected void Page_Load (object Sender, EventArgs e) {
if (!Page.IsPostBack){
Clases necesarias para interaccionar con la
SqlConnection MiConexion; BBDD en SQL Server
SqlCommand MiComando;
SqlDataReader MiDataReader;

MiConexion = new SqlConnection();


MiConexion.ConnectionString = "Data Source=NombreOrdenador; Initial
Catalog=webCatedra; Integrated Security=true";
Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 19

ADO.NET Desarrollo de Aplicaciones


Clases Básicas (XI) con Sistemas de Bases de Datos

MiComando = new SqlCommand(); Se inicializa el comando


MiComando.CommandText = "Select * from Persona";
MiComando.CommandType = CommandType.Text;
MiComando.Connection = MiConexion;

MiComando.Connection.Open(); SqlDataReader no se puede instanciar

MiDataReader = MiComando.ExecuteReader(CommandBehavior.CloseConnection);

gv.DataSource = MiDataReader;
gv es un GridView de la Interfaz de
gv.DataBind(); Usuario [ojo estamos acoplando]

MiComando.Dispose();
MiConexion.Dispose();

Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 20

10
ADO.NET Desarrollo de Aplicaciones
Clases Básicas (XII) con Sistemas de Bases de Datos

• Ejemplo Con Oracle


– Para usar este ejemplo, tenéis que seguir los
siguientes pasos:
1. Descargarse de
http://www.oracle.com/technology/software/tech/windows/o
dpnet/index.html las clases necesarias para ADO.NET de
Oracle. El fichero es ODTwithODAC10202.exe de 168Mb
2. Crear los Listener usando el Asistente de Configuración de
Red
3. Configurar la cadena de conexión como : “Data Source =
JDEV8_05; User ID=NombreUsuario; Password= Password;
Unicode= True;
– El código es el mismo pero poniendo OracleXXX en
lugar de SQLXXX

Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 21

ADO.NET Desarrollo de Aplicaciones


Clases Básicas (XIII) con Sistemas de Bases de Datos

• Reto:
– Investiga sobre cómo tendría que codificarse
para el caso en el que se quisieran hacer
inserciones, actualizaciones o borrados.
• http://quickstart.developerfusion.co.uk/QuickStart
/howto/doc/adoplus/ExecuteCommand.aspx

Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 22

11
Factoría Abstracta Desarrollo de Aplicaciones
Proveedores Datos con Sistemas de Bases de Datos

• Independencia de los Proveedores


– Como cada fabricante proporciona su propio
SGBDR, es importante hacer programas
independientes del API
– Para cada proveedor se proporcionan una
serie de clases:
• SQL Server
• Oracle
• OLE-DB
• ODBC
• SqlCE

Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 23

Factoría Abstracta Desarrollo de Aplicaciones


Proveedores Datos (II) con Sistemas de Bases de Datos

• Abstract Factory
– Lo mejor es trabajar sobre Interfaces que
permiten hacer un desarrollo independiente
del proveedor de Datos

Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 24

12
Factoría Abstracta Desarrollo de Aplicaciones
Proveedores Datos (III) con Sistemas de Bases de Datos

Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 25

Factoría Abstracta Desarrollo de Aplicaciones


Proveedores Datos (IV) con Sistemas de Bases de Datos

• Implementado en ADO.NET
– ADO.NET 2.0 proporciona las clases necesarias para
ello.
– http://msdn2.microsoft.com/en-
us/library/ms379620(VS.80).aspx
– http://geeks.ms/blogs/pabbate/archive/2006/06/03/4
23.aspx
– http://www.c-
sharpcorner.com/UploadFile/mosessaur/abstractfacto
ryadonet202152006053643AM/abstractfactoryadonet
2.aspx?ArticleID=4468e7cc-57c1-4738-8e83-
a8db48fd1d9f
Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 26

13
Factoría Abstracta Desarrollo de Aplicaciones
Proveedores Datos (V) con Sistemas de Bases de Datos

– http://www.daveandal.net/articles/provider-
independent/  Con algunos ejemplos
interesantes

Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 27

Desarrollo de Aplicaciones
Arquitectura (II) con Sistemas de Bases de Datos

• Contexto
– Diseñamos una aplicación en capas, donde
cada capa expone servicios que otras
aplicaciones o capas pueden consumir, y
donde cada capa puede consumir servicios de
otras
• Problema
– Cuáles son las capas y qué componente se
coloca en cada capa

Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 28

14
Desarrollo de Aplicaciones
Referencias
con Sistemas de Bases de Datos

• http://msdn.microsoft.com/library/spa/def
ault.asp?url=/library/SPA/vbcon/html/vbor
iVisualBasicInActionEndtoEndSolutions.asp
• http://asp.net/learn/dataaccess/tutorial04
vb.aspx?tabid=63
• http://asp.net/learn/dataaccess/tutorial02
vb.aspx?tabid=63
• http://asp.net/learn/dataaccess/default.as
px?tabid=63

Desarrollo de Aplicaciones con Sistemas de Bases de Datos Sesión 3.2: 29

15

You might also like