Publicado el 5 de Mayo del 2019
2.031 visualizaciones desde el 5 de Mayo del 2019
475,2 KB
72 paginas
Creado hace 15a (17/03/2010)
Acceso a Datos
ADO.NET
ADO.NET
Integración de Sistemas
Parte II. Diseño e implementación de
aplicaciones Web con .NET
Indice
Evolución histórica del acceso a datos
Conceptos básicos de ADO.NET
Generic Factory Model
Entorno conectado
Entorno desconectado
Anexo I. Correspondencia entre tipos C#, SQL estándar y SQL Server
Evolución histórica de acceso a datos
Inicialmente, no había interfaces comunes de acceso a
datos
Cada proveedor proporcionaba un API (u otros mecanismos)
Cambiar SGBD tenía un coste muy alto
Cambiar SGBD tenía un coste muy alto
Evolución histórica de acceso a datos
ODBC (Open DataBase Connectivity)
Estándar de acceso a BD desarrollado por Microsoft
Proporciona interfaz única para acceder a varios SGBD
Modelo de drivers para acceder datos
Cualquier proveedor puede escribir un driver ODBC
Cualquier proveedor puede escribir un driver ODBC
⇒ Es posible escribir aplicación independiente del SGBD
Soportado por la mayoría de los SGBD
No incluye soporte para algunos tipos incluidos en SQL:1999 y
SQL:2003
Evolución histórica de acceso a datos
OLE-DB (Object Linking and Embedding Database)
Desarrollado por Microsoft para mejorar ODBC
Proporciona un API más limpia y acceso a datos más eficiente que
ODBC
OLE-DB Providers
Proporcionan acceso a un SGBD
Inicialmente: ODBC
Posteriormente se añadiron otros
OLE-DB Consumers
Se comunican con los “proveedores”
Evolución histórica de acceso a datos
OLE-DB (Object Linking and Embedding Database)
Arquitectura OLE-DB
Extraído de: McClure, W. B. (2005). Professional ADO. NET 2:
Programming with SQL Server 2005, Oracle, and MySQL: Wrox.
Evolución histórica de acceso a datos
Data Access Consumers
Desde lenguajes que utilizan punteros, como C o C++ es posible
acceder directamente a las APIs ODBC y OLE-DB
Para acceder desde otros lenguajes es necesaria una nueva capa
⇒ Aparecen: DAO, RDO, ADO y ADO.NET
Evolución histórica de acceso a datos
Data Access Consumers
Data Access Objects (DAO)
Estaba basado en el motor JET, que había sido diseñado para Access
DAO 1.0 soportaba ODBC y comunicación directa con Access (sin
ODBC)
DAO 2.0 se amplió para soportar OLE-DB
Problema: sólo puede hablar con el motor JET
⇒ Menor rendimiento
Evolución histórica de acceso a datos
Data Access Consumers
Remote Data Objects (RDO)
Solución de Microsoft al bajo rendimiento de DAO
Para comunicarse con BD distintas de Access, RDO no usa el motor
JET como DAO. Se comunica con el nivel ODBC directamente
Puede usar cursores del lado del cliente para navegar los registros, en
contraposición a la necesidad de DAO de usar cursores del lado de
servidor
⇒ Mejor rendimiento
Evolución histórica de acceso a datos
Data Access Consumers
ActiveX Data Objects (ADO)
Propuesto como sustituto de DAO y RDO
Se pretendía que sirviese para acceder a cualquier tipo de datos (desde
BD a e-mail, ficheros de texto plano y hojas de cálculo)
Soporta comunicación con fuentes de datos a través de ODBC y OLE-
DB
Introdujo el modelo de proveedores (provider model), que permitió a
los vendedores de software crear sus propios proveedores
Evolución histórica de acceso a datos
Data Access Consumers
ActiveX Data Objects (ADO)
Arquitectura ADO
Extraído de: McClure, W. B. (2005). Professional ADO. NET 2:
Programming with SQL Server 2005, Oracle, and MySQL: Wrox.
Evolución histórica de acceso a datos
Data Access Consumers
ActiveX Data Objects (ADO)
Características
Modelo más limpio que sus predecesores
Batch updating
Disconnected Data Access
Multiple Recordsets
Inconvenientes
El trabajo en modo desconectado era engorroso
No tenía pool de conexiones
Diseño no correctamente factorizado
Conceptos básicos de ADO.NET
Arquitectura del .NET Framework
K
K
D
D
S
S
k
k
r
r
o
o
w
w
e
e
m
m
a
a
r
r
F
F
T
T
E
E
N
N
.
.
k
r
o
w
e
m
a
r
F
T
E
N
.
l
e
b
a
t
u
b
i
r
t
s
d
e
R
i
k
k
r
r
o
o
w
w
e
e
m
m
a
a
r
r
F
F
T
T
E
E
N
N
.
.
y
r
a
r
b
L
s
s
a
C
i
l
VB
C++
C#
J#
…
Common Language Specification
LINQ
ADO.NET Entity Framework
WPF
WCF
WF
Card Space
ADO.NET
WinForms
ASP.NET
Base Class Library
Common Language Runtime
Windows
COM+ Services
Conceptos básicos de ADO.NET
Con la versión del .NET Framework, Microsoft introdujo un nuevo
modelo de acceso a datos, llamado ADO.NET
ADO.NET no es ActiveX
Es un modelo completamente nuevo (comparte funcionalidad pero no la
jerarquía de clases)
jerarquía de clases)
Soporta comunicación con fuentes de datos a través de ODBC y OLE-
DB
Además, ofrece la opción de usar proveedores de datos específicos de
un SGBD
Gran rendimiento al ser capaces de utilizar optimizaciones específicas
⇒ Permite conectarse a casi cualquier BD existente
Conceptos básicos de ADO.NET
Data Providers
OLE DB .NET
Data Provider
OLE DB
Provider
ODBC .NET
Data Provider
ODBC
Driver
Cliente
SQL .NET
Data Provider
Oracle .NET
Data Provider
…
Otra BD
Otra BD
SQL SERVER
Oracle SERVER
Proveedores de acceso a datos (data providers) en ADO.NET
Conceptos básicos de ADO.NET
Data Providers
Proveedores de acceso a datos en ADO.NET
OLE DB
Acceso vía protocolo OLE DB a cualquier fuente de datos que lo soporte
System.Data.OleDb
ODBC
Acceso vía protocolo ODBC a cualquier fuente de datos que lo soporte
Acceso vía protocolo ODBC a cualquier fuente de datos que lo soporte
System.Data.Odbc
SQL Server
Acceso nativo a MS SQL Server 7.0 o superior y MS Access
System.Data.SqlClient
Oracle
Acceso nativo a Oracle Server
System.Data.OracleClient
Otros provistos por terceros
MySQL, PostgreSQL, DB2, etc.
Conceptos básicos de ADO.NET
Novedades
Acceso a datos desconectado real
Pool de conexiones
Conceptos básicos de ADO.NET
Connection: responsable de establecer y mantener la conexión a la fuente de
datos, junto con cualquier información específica de la conexión
Command: almacena la consulta que va a ser enviada a la fuente de datos y
cualquier parámetro aplicable
DataReader: proporciona capacidad de lectura rápida, hacia adelante (forward-
DataReader: proporciona capacidad de lectura rápida, hacia adelante (forward-
only) para iterar sobre los registros rápidamente
DataSet: proporciona mecanismo de almacenamiento para datos
desconectados.
Nunca se comunica con ninguna fuente de datos e ignora la fuente de los datos usada para
rellenarlo (populate)
DataAdapter: es lo que relaciona el DataSet y la fuente de datos. Es
responsable de:
Recuperar los datos desde el objeto Command y rellenar el DataSet con los datos recuperados
Persistir los cambios realizados en el DataSet en la fuente de datos.
Conceptos básicos de ADO.NET
Base de Datos
XxxConnection
XxxConnection
XxxCommand
XxxDataAdapter
DataSet
XxxDataReader
Conceptos básicos de ADO.NET
Conceptos básicos de ADO.NET
Entornos de Acceso a Datos
Conectado:
forward-only
Aplicación realiza una consulta y lee los datos conforme los va procesando
Cursor unidireccional
Objeto DataReader
Desconectado
La aplicación ejecuta la consulta y almacena los resultados de la misma para
procesarlos después
Minimiza el tiempo de conexión a la base de datos
Objetos lightweight
Objetos DataSet y DataAdapter
Conceptos básicos de ADO.NET
Namespace System.Data
Organiza el modelo de objetos
Incluye:
System.Data
System.Data.OleDb
System.Data.Odbc
System.Data.SqlClient
...
Conceptos básicos de ADO.NET
Ejemplo de Creación de Conexiones
using System;
using System.Data.SqlClient;
namespace Es.UDC.DotNet.ADODotNetTutorial
{
class SqlDataBaseConnection
{
public static void Main(string[] args)
{{
SqlConnection connection = null;
try
{
// The connection string should be read from a configuration
// file...
String connectionString = "Data Source=localhost\\SQLExpress;" +
"Initial Catalog=ADOTutorial;User ID=ADOTutorial;" +
"Password=ADOTutorial";
// Create the connection ...
connection = new SqlConnection();
connection.ConnectionString = connectionString;
Conceptos básicos de ADO.NET
Ejemplo de Creación de Conexiones
// Create the command and set properties ...
SqlCommand command = new SqlCommand();
command.CommandText = "SELECT * FROM Account";
command.Connection = connection;
// Open the connection ...
connection.Open();
// Execute the command ...
SqlDataReader sqlDataReader = command.ExecuteReader();
// Close the SqlDataReader ...
sqlDataReader.Close();
sqlDataReader.Close();
Console.WriteLine("DataBaseConnection is OK");
}
catch (Exception e)
{
Console.WriteLine("Message: " + e.Message);
Console.WriteLine("StackTrace: " + e.StackTrace);
}
finally
{
// Ensures connection is closed
if (connection != null) connection.Close();
}
}
}
}
Conceptos básicos de ADO.NET
Namespace System.Data
Independencia del proveedor sin Generic Factory Model
Extraído de: McClure, W. B. (2005). Professional ADO. NET 2:
Programming with SQL Server 2005, Oracle, and MySQL: Wrox.
Conceptos básicos de ADO.NET
Namespace System.Data
Todos los Data Providers deben implementar una serie de
interfaces
System.Data.IDbConnection
System.Data.IDbCommand
System.Data.IDbDataParameter
System.Data.IDbTransaction
System.Data.IDataReader
System.Data.IDataAdapter
...
ADO.NET 2.0
100% compatible con cualquier código escrito en ADO.NET 1.0 ;-)
Mejora la serialización XML y el pool de conexiones
insert permite añadir varias filas en una única instrucción
Reducción de código necesario para efectuar tareas comunes
Reducción de código necesario para efectuar tareas comunes
Posibilidad de escribir código de acceso a BD independiente del
proveedor
⇒ Generic Factory Model
Generic Factory Model
Independencia del proveedor con Generic Factory Model
Extraí
Comentarios de: Acceso a Datos ADO.NET (0)
No hay comentarios