Vous êtes sur la page 1sur 28

Trabajo Teórico POO

mayo, 2005

Acceso a Datos con ADO.NET

Rubén De La Peña Ramos


Pablo Sánchez Manzano

Departamento de Informática y Automática


Universidad de Salamanca
Información de los autores:

Rubén De La Peña Ramos


Estudiante de Ingeniería Técnica en Informática de Sistemas
Facultad de Ciencias – Universidad de Salamanca
naskar@usal.es
Pablo Sánchez Manzano
Estudiante de Ingeniería Técnica en Informática de Sistemas
Facultad de Ciencias – Universidad de Salamanca
dampir@usal.es

Este documento puede ser libremente distribuido.


© <<2005>> Departamento de Informática y Automática - Universidad de Salamanca.
Resumen
Este documento presenta la nueva forma de Acceso a Datos de Microsoft, ADO.NET; así como
una referencia histórica al acceso a datos.
Asimismo incluye una breve introducción a la Plataforma .NET y al .NET Framework de
Microsoft.

Abstract
This document is about the Microsoft’s new way to Data Access, ADO.NET; and an historical
reference to Data Access.
Moreover, it includes a brief introduction to the .NET Platform and the .NET Framework
from Microsoft,

Trabajo Teórico POO i


Tabla de Contenidos
1. Introducción________________________________________________________ 1
1.1. ¿Qué es Microsoft .NET? ________________________________________ 1
1.2. ¿Qué es .NET Framework?_______________________________________ 3
1.2.1 Common Language Runtime _____________________________________ 3
1.2.2 Bibliotecas de clases ___________________________________________ 4
2. Historia Acceso a Datos_______________________________________________ 5
2.1. Historia del acceso a datos de Microsoft ____________________________ 5
3. ADO.NET __________________________________________________________ 7
3.1. Objetivos de Diseño _____________________________________________ 7
3.2. Características _________________________________________________ 7
3.3. Arquitectura ___________________________________________________ 8
3.4. Conjuntos de Datos ____________________________________________ 10
3.4.1 La DataTableCollection________________________________________ 11
3.4.2 La DataRelationCollection _____________________________________ 11
3.4.3 ExtendedProperties ___________________________________________ 11
3.4.4 Clasificación ________________________________________________ 11
3.5. Proveedores Datos _____________________________________________ 12
3.5.1 Tipos proveedores de datos incluidos en .NET Framework 1.1 _________ 12
3.5.2 Objetos DataAdapter __________________________________________ 13
3.5.3 Objetos Connection ___________________________________________ 14
3.5.4 Objetos DataReader ___________________________________________ 15
3.5.5 Objetos Command ____________________________________________ 16
3.6. Leer y actualizar con Adaptadores de Datos. Ejemplos _______________ 17
3.6.1 Llenar un DataSet desde un DataAdapter __________________________ 18
3.6.2 Actualizar la base de datos con un DataAdapter y el DataSet ___________ 19
4. Conclusiones ______________________________________________________ 21
5. Bibliografía _______________________________________________________ 21
6. Enlaces ___________________________________________________________ 22

ii Trabajo Teórico POO


Tabla de Imágenes
Figura 1.- Esquema de la Plataforma .NET _____________________________________ 1
Figura 2.- .NET Lenguajes __________________________________________________ 2
Figura 3.- Arquitectura .NET ________________________________________________ 3
Figura 4.- Ejemplo Funcionamiento .NET ______________________________________ 4
Figura 5.- Historia del acceso a datos de Microsoft _______________________________ 6
Figura 6.- Componentes ADO.NET ___________________________________________ 9
Figura 7.- Arquitectura de ADO.NET _________________________________________ 9
Figura 8.- Espacio de nombres de Conjuntos de Datos ___________________________ 10

Trabajo Teórico POO iii


iv Trabajo Teórico POO
1. Introducción
1.1. ¿Qué es Microsoft .NET?
En palabras de Microsoft:
“.NET is the Microsoft Web services strategy to connect information, people, systems, and
devices through software. Integrated across the Microsoft platform, .NET technology provides
the ability to quickly build, deploy, manage, and use connected, security-enhanced solutions
with Web services. .NET-connected solutions enable businesses to integrate their systems more
rapidly and in a more agile manner and help them realize the promise of information anytime,
anywhere, on any device.
The Microsoft platform includes everything a business needs to develop and deploy a Web
service-connected IT architecture: servers to host Web services, development tools to create
them, applications to use them, and a worldwide network of more than 35,000 Microsoft
Certified Partner organizations to provide any help you need.”
Durante la última década la evolución en el desarrollo de aplicaciones en general y
particularmente en el entorno de Windows ha tenido como resultado la existencia actualmente
de multitud de servicios duplicados, específicos para un determinado lenguaje o herramienta, y
pocas posibilidades reales de reutilización de código, al tiempo que el propio sistema ha ido
ganando en complejidad de manera vertiginosa.
.NET es la solución de Microsoft para solventar esta situación, provee los cimientos para la
nueva generación de software. Esta plataforma utiliza los Servicios Web como un medio para
poder interoperar a distintas tecnologías, permite conectar distintos sistemas operativos,
dispositivos físicos, información y usuarios.
Microsoft .NET extiende las ideas de Internet y el sistema operativo haciendo de la propia
Internet la base de un nuevo sistema operativo. En última instancia, esto permitirá a los
desarrolladores crear programas totalmente independientes de los dispositivos y que aprovechen
por completo la conectividad de Internet y sus aplicaciones, .NET en Internet sería la base para
un sistema operativo distribuido sobre el que se ejecutarían las aplicaciones, servicios (que ya
no estarían en nuestro PC, sino en la red) preparadas para relacionarse entre sí de manera
transparente.

Figura 1.- Esquema de la Plataforma .NET

-1-
Acceso a Datos con ADO.NET

Esta plataforma consta de un conjunto de servicios universales, en forma de bibliotecas de


clases de componentes, idénticos para todos los lenguajes, y que facilitan el desarrollo de todo
tipo de aplicaciones (Windows, Web, acceso a datos…) al tiempo que mantiene la integración
con los desarrollos existentes haciendo posible la interoperabilidad entre lenguajes.
.NET hace posible además del desarrollo de componentes y aplicaciones para Windows,
aplicaciones y servicios Web, aplicaciones de consola, bibliotecas de clases genéricas,
aplicaciones para dispositivos móviles…
En definitiva .NET facilita un entorno de ejecución común para múltiples lenguajes, un
sistema de tipos también común y una biblioteca de clases con servicios fundamentales, dando a
los desarrolladores las herramientas y tecnologías para hacer rápidamente soluciones de negocio
que involucran a distintas aplicaciones, dispositivos físicos y organizaciones.
Resumiendo: Microsoft .NET es una plataforma para generar, ejecutar y experimentar la
próxima generación de aplicaciones distribuidas. Abarca clientes, servidores y herramientas de
desarrollador, y consta de:
¾ El modelo de programación .NET Framework, que permite a los desarrolladores crear
aplicaciones Web, aplicaciones de cliente inteligente y servicios Web XML que exponen su
funcionalidad mediante programación a través de una red utilizando protocolos estándar
como SOAP, XML y HTTP.
¾ Herramientas de desarrollador, como Visual Studio® .NET, que proporcionan un entorno
de programación integrado de gran rapidez para la programación con .NET Framework.
¾ Un conjunto de servidores, incluidos Windows® 2000, SQL Server™ y BizTalk™ Server,
que integra, ejecuta y administra aplicaciones y servicios Web XML.
¾ Software de cliente, como Windows XP, Windows CE y Microsoft Office XP, que permite
a los desarrolladores ofrecer una experiencia de usuario convincente e intensa a través de
una familia de dispositivos y productos existentes.

Varios desarrolladores pueden colaborar en un mismo proyecto usando diferentes lenguajes


compatibles con .NET.

Figura 2.- .NET Lenguajes

Trabajo Teórico POO 2


De la Peña y Sánchez

1.2. ¿Qué es .NET Framework?


.NET Framework es el marco de trabajo con el cuál desarrollaremos nuestras aplicaciones.
Es un conjunto de servicios de programación diseñados para simplificar el desarrollo de
aplicaciones en el entorno altamente distribuido de Internet. El .NET Framework se instala
como un componente aparte en Windows 2000, mientras que Windows XP y las futuras
versiones de Windows lo incorporan directamente al sistema operativo. Como por ejemplo
Windows Server 2003 o Windows .NET CE.
.NET Framework es el modelo de programación de la plataforma .NET para crear,
implementar y ejecutar aplicaciones Web, aplicaciones de cliente inteligente y servicios Web
XML. Con .NET Framework, Microsoft mejora enormemente la productividad del
programador, la facilidad de desarrollo y la ejecución de aplicaciones confiables.
Administra gran parte de los detalles de infraestructura, permitiendo a los desarrolladores
centrarse en escribir el código de la lógica empresarial para sus aplicaciones. .NET Framework
incluye Common Language Runtime y bibliotecas de clases.

Figura 3.- Arquitectura .NET

1.2.1 Common Language Runtime


Common Language Runtime (CLR) asume la responsabilidad de ejecutar la aplicación. CRL
garantiza que se cumplan todas las dependencias de la aplicación, es responsable de los
servicios en tiempo de ejecución como la integración de lenguajes, la aplicación de seguridad y
la administración de la memoria, los procesos y los subprocesos. Además, juega un importante
papel en tiempo de desarrollo, puesto que características como la administración de la duración,
la aplicación de nombres de tipos seguros, el control de excepciones entre lenguajes, la creación
de enlaces dinámicos, etc., reducen la cantidad de código que debe escribir un desarrollador
para convertir lógica empresarial en un componente reutilizable. La mayor parte de este trabajo

3 Trabajo Teórico POO


Acceso a Datos con ADO.NET

se controla de manera transparente, simplificando las tareas de los desarrolladores y


administradores.

1.2.2 Bibliotecas de clases


¾ Las clases base proporcionan funcionalidad estándar como funciones de entrada y salida,
manipulación de cadenas, administración de la seguridad, comunicaciones de red,
administración de subprocesos y de texto, características de diseño de la interfaz de usuario
y otras funciones. La forma de organizar la biblioteca de clases de .Net dentro del código es
a través de los espacios de nombres (namespaces), donde cada clase está organizada en
espacios de nombres según su funcionalidad. La principal ventaja de los espacios de
nombres de .Net es que de esta forma se tiene toda la biblioteca de clases de .Net
centralizada bajo el mismo espacio de nombres (System). Además, desde cualquier
lenguaje se usa la misma sintaxis de invocación, ya que a todos los lenguajes se aplica la
misma biblioteca de clases.
¾ Las clases de datos de Microsoft ADO.NET System.Data admiten la administración de
datos permanentes e incluyen clases SQL para manipular almacenes de datos permanentes a
través de una interfaz SQL estándar.
¾ Las clases XML System.XML permiten la manipulación de datos XML, así como la
búsqueda y traducción de XML.
¾ Las clases de Microsoft ASP.NET admiten el desarrollo de aplicaciones Web y servicios
Web XML.
¾ Las clases de Windows Forms System.Windows.Forms admiten el desarrollo de
aplicaciones de cliente inteligente basadas en Windows.
¾ …(y muchas más)
Juntas, las bibliotecas de clases proporcionan una interfaz de desarrollo coherente y común
entre todos los lenguajes compatibles con .NET Framework.

Veamos como se lleva a cabo el desarrollo de una aplicación bajo .NET Framework:

Figura 4.- Ejemplo Funcionamiento .NET

Trabajo Teórico POO 4


De la Peña y Sánchez

La herramienta de desarrollo compila el código fuente de cualquiera de los lenguajes


soportados por .Net en un mismo código, denominado código intermedio (MSIL, Microsoft
Intermediate Lenguaje). Para generar dicho código el compilador se basa en el Common
Language Specification (CLS) que determina las reglas necesarias para crear código MSIL
compatible con el CLR.
De esta forma, indistintamente de la herramienta de desarrollo utilizada y del lenguaje
elegido, el código generado es siempre el mismo, ya que el MSIL es el único lenguaje que
entiende directamente el CLR. Este código es transparente al desarrollo de la aplicación ya que
lo genera automáticamente el compilador.
Sin embargo, el código generado en MSIL no es código máquina y por tanto no puede
ejecutarse directamente. Se necesita un segundo paso en el que una herramienta denominada
compilador JIT (Just-In-Time) genera el código máquina real que se ejecuta en la plataforma
que tenga la computadora.
De esta forma se consigue con .Net cierta independencia de la plataforma, ya que cada
plataforma puede tener su compilador JIT y crear su propio código máquina a partir del código
MSIL.
La compilación JIT la realiza el CLR a medida que se invocan los métodos en el programa
y, el código ejecutable obtenido, se almacena en la memoria caché de la computadora, siendo
recompilado sólo cuando se produce algún cambio en el código fuente.
El competidor claro de la plataforma .NET es J2EE de Sun. En la dirección
http://www.ciberteca.net/articulos/programacion/net/default.asp se puede encontrar una
interesante comparativa entre ambas opciones.

2. Historia Acceso a Datos


Las soluciones para simplificar el acceso a datos desde los lenguajes de programación mas
usuales han sido muchas y diversas, generalmente dependiendo de un cierto fabricante y, en
muchas ocasiones ligadas a una determinada plataforma, sistema operativo, o incluso lenguaje.
Aún así cabe destacar 2 hitos importantes:
¾ EL lenguaje SQL
¾ El estándar ODBC: estándar abierto creado por Microsoft y otras compañías en el principio
de los noventa, ampliamente adoptado por la comunidad Open Source. Por esto, se han
desarrollado drivers para muchos sistemas de bases de datos, a los cuales no se puede
acceder con tecnologías de acceso a datos posteriores.
En un principio Windows no incorporaba mecanismo alguno para facilitar el acceso a
datos, lo que llevó a algunos fabricantes a desarrollar sus propios productos.
Algunos Ejemplos:
¾ DAO (Data Access Objects) con Visual Basic o Visual C++
¾ BDE (Borland Database Engine) con Borland Delphi

2.1. Historia del acceso a datos de Microsoft


¾ DAO (Data Access Objects, Visual Basic 3.0):
Construido para acceder a bases de datos locales. Está optimizado para el acceso a Access, por
lo que es el método de acceso a este sistema de bases de datos hasta Visual Basic 6.
¾ RDO (Remote Access Objects, Visual Basic 4.0):
Esta tecnología permitía un acceso rápido a bases de datos remotas.

5 Trabajo Teórico POO


Acceso a Datos con ADO.NET

¾ ODBCDirect (Visual Basic 5.0 y 97):


La facilidad de uso de DAO y el acceso a bases de datos remotas de RDO.
¾ OLE DB:
Es un estándar abierto para el acceso a todo tipo de datos, tanto relacionales como no
relacionales, basa la comunicación en proveedores OLE DB (concepto similar a los drivers de
ODBC), creándose uno para cada fuente de datos soportada. Se accede a la información a través
un conjunto de interfaces COM, conocidas como "consumidores OLE DB". El "nivel medio" de
la arquitectura OLE DB ofrece servicios a los proveedores de datos, estos servicios son el
pooling de conexiones, la lista de transacciones, la persistencia de los datos, la manipulación de
datos del lado del cliente, etc. Para asegurarse un amplio apoyo para OLE DB, Microsoft
incorporó un proveedor OLE DB para los drivers de ODBC, por lo que OLE DB podía acceder
desde el principio a cualquier fuente de datos que tuviera un driver ODBC.
¾ ADO (ActiveX Data Objects, Visual Basic 6 y Visual Studio 6):
Con la llegada de Internet, facilita los scripts del lado del servidor, siendo estos pequeños y
permitiendo el paso de estructuras de datos entre el cliente y el servidor. Es una capa que
permite a los usuarios de lenguajes de alto nivel acceder a bases de datos OLE DB mediante un
modelo de objetos simple.

Windows 2000 fue un punto de inflexión en cuanto al acceso a datos se refiere, ya que a
partir de ese momento era el propio sistema operativo el que incorporaba los mecanismos
necesarios para acceder a bases de datos.
Se fundamentó en básicamente dos cosas:
- Controladores OLE DB (para distintos sistemas RDBMS -Relational Database
Management System-)
- ADO (ActiveX Data Objects) que proporcionaba una interfaz de alto nivel para
comunicarse con los controladores anteriores.
La llegada de la plataforma .NET trajo consigo una evolución en los mecanismos de acceso
a datos, donde ADO dejó paso a ADO.NET, un modelo de objetos mas avanzado que no
necesita mantener una conexión continua con el sistema RDBMS.

Gráficamente:

Figura 5.- Historia del acceso a datos de Microsoft

Trabajo Teórico POO 6


De la Peña y Sánchez

3. ADO.NET
ADO.NET constituye la interfaz fundamental de las aplicaciones para proporcionar servicios de
acceso a datos en la plataforma Microsoft .NET, donde existen, básicamente, dos elementos:
¾ El conjunto de datos desconectado: permiten al usuario trabajar con los datos de una
forma desconectada (System.Data.DataSet). La representación interna de los
datos del DataSet utiliza XML, por lo que el flujo de datos transferido es independiente
de lenguaje y plataforma.
¾ Unos proveedores que facilitan la ejecución de operaciones contra un sistema RDBMS.
Actualmente están disponibles en .NET Framework 1.1:
- Proveedor de datos de .NET Framework para SQL Server
- Proveedor de datos de .NET Framework para OLE DB
- Proveedor de datos de .NET Framework para ODBC
- Proveedor de datos de .NET Framework para Oracle
Esquema de funcionamiento básico: se utilizará uno de los adaptadores para conectar con
el RDBMS recuperando un conjunto de datos y cerrando la conexión. Ese conjunto, que sería un
objeto DataSet, puede ser transferido entre aplicaciones y puede operarse sobre él como si
fuera una base de datos. Por último, se restablecerá la conexión usando el proveedor anterior y
enviando al RDBMS las actualizaciones realizadas.

3.1. Objetivos de Diseño


¾ Soportar el modelo de programación multinivel (n-tier): en este modelo, los datos se leen de
la fuente de datos, se desconecta y pasan a través de los diferentes niveles
¾ Integrar el estándar XML: se pueden transformar los datos a XML, pero también se puede
controlar el esquema y leer y escribir en XML.
¾ Minimizar la curva de aprendizaje desde ADO: se buscó la facilidad de cambio desde ADO
a ADO.NET de los programadores que estuvieran familiarizados con la anterior tecnología.
¾ Combinar el paradigma relacional con el orientado a objetos: se provee una interfaz
orientada a objetos de los datos a través del tipo DataSet.
¾ Reducir los errores de programación: esto se consigue simplificando el modo en el que se
accede a los datos, ya que muchos programadores tuvieron problemas en este campo con
ADO. Se puede acceder a los datos de dos formas: leyendo todos los datos del resultado de
la consulta y almacenándolos en un DataSet, o leerlos poco a poco a través de un objeto
DataReader. Esto lleva a una perdida de funcionalidad, pero se evita su uso incorrecto o
inadvertido, ya que era lo que causaba más errores a los programadores en ADO.

3.2. Características
¾ ADO.NET no depende de conexiones continuamente activas.
Las aplicaciones se conectan a la base de datos sólo durante el tiempo necesario para
extraer o actualizar los datos. La base de datos ya no contiene conexiones que la mayor
parte del tiempo permanecen inactivas, así que puede dar servicio a muchos más usuarios.
¾ Las interacciones con la base de datos se realizan mediante comandos de datos.
Para efectuar operaciones en una base de datos, se ejecutan instrucciones SQL o
procedimientos almacenados (que incluyen instrucciones SQL).

7 Trabajo Teórico POO


Acceso a Datos con ADO.NET

En ADO.NET los comandos de datos se usan para empaquetar las instrucciones SQL o
los procedimientos almacenados. Por ejemplo, si se desea leer un conjunto de filas de una
base de datos, se crea un comando de datos y se configura con el texto de una instrucción
SQL Select o con el nombre del procedimiento almacenado que recupera registros.
¾ Los datos se pueden almacenar en memoria caché en conjuntos de datos (DataSet)
Ya que sólo son contenedores; se llenan con comandos SQL o procedimientos
almacenados que se ejecutan desde un adaptador de datos.
¾ Los conjuntos de datos son independientes de los orígenes de datos
Dado que un conjunto de datos no está sujeto directamente a un origen de datos, resulta
un buen punto de integración para datos procedentes de múltiples orígenes.
¾ Los datos se conservan como XML
Los datos deben moverse desde el almacén de datos hasta el conjunto de datos y de ahí
a diversos componentes. En ADO.NET, el formato de transferencia de datos es XML. En
consecuencia, si es necesario conservar datos (por ejemplo, en un archivo), se almacenarán
como XML. Si se tiene un archivo XML, se puede utilizar como cualquier otro origen de
datos y crear un conjunto de datos a partir de él.
No es necesario saber XML para utilizar datos en ADO.NET, ya que convierte
automáticamente los datos a XML y viceversa según sea preciso; así que se interactúa con
los datos utilizando métodos de programación ordinarios.
¾ Las estructuras de datos están definidas por esquemas
Los conjuntos de datos se representan como XML. La estructura del conjunto de datos,
es decir, la definición de las tablas, columnas, tipos de datos, restricciones, etc. que se
encuentran en el conjunto de datos, se define por medio de un esquema XML basado en el
lenguaje de definición de esquemas XML (XSD).
Los esquemas pueden ser generados y actualizados por Visual Studio .NET según sea
necesario, o manualmente.

3.3. Arquitectura
La siguiente ilustración muestra los componentes principales de una aplicación ADO.NET
¾ DataSets
¾ Proveedores administrados

Trabajo Teórico POO 8


De la Peña y Sánchez

Figura 6.- Componentes ADO.NET1

Los componentes de ADO.NET están diseñados para separar el acceso a datos de la


manipulación de datos. ADO.NET tiene dos componentes principales que cumplen esta función:
el DataSet y el proveedor de datos de .NET Framework, que es un conjunto de componentes
entre los que se incluyen los objetos:
¾ Connection
¾ Command
¾ DataReader
¾ DataAdapter.
En el siguiente diagrama se ilustran los componentes de la arquitectura de ADO.NET.

Figura 7.- Arquitectura de ADO.NET

1
BIZTALK.- BizTalk Server 2004 es un producto de Windows Server System que permite a los clientes
integrar sistemas, empleados y asociados comerciales con más eficacia y rapidez que nunca.

9 Trabajo Teórico POO


Acceso a Datos con ADO.NET

Para poder utilizar ADO.NET es necesario incluir el espacio de nombres System.Data,


para ellos basta con introducir en la aplicación la directiva: using System.Data

3.4. Conjuntos de Datos


Un conjunto de datos es una memoria caché desconectada de registros recuperados de un origen
de datos. Funciona como un almacén virtual de datos: un conjunto de datos incluye una o más
tablas basadas en las tablas de la base de datos real y puede incluir información acerca de las
relaciones entre estas tablas y las restricciones para los datos que puede contener cada tabla.
Los datos del conjunto de datos suelen ser una versión muy reducida de lo que hay en la
base de datos. Sin embargo, puede trabajar con ellos igual que lo hace con los datos reales.
Mientras se esté trabajando, se permanecerá desconectado de la base de datos, que quedará libre
para ejecutar otras tareas.
El conjunto de datos es un contenedor pasivo para los datos. Para extraer realmente datos
de la base de datos y (opcionalmente) escribirlos de nuevo, se utilizan adaptadores de datos. Un
adaptador de datos contiene uno o varios comandos utilizados para llenar una única tabla del
conjunto de datos y para actualizar la tabla correspondiente de la base de datos.
Como el conjunto de datos es realmente una copia privada de los datos de la base de datos,
no reflejará necesariamente el estado actual de la base de datos, para ver los últimos cambios
realizados por otros usuarios, se puede actualizar el conjunto de datos; llamando al método
Fill correspondiente.
Una de las ventajas de utilizar conjuntos de datos es que los componentes pueden
intercambiarlos cuando lo necesiten. Por ejemplo, un objeto podría crear y llenar un conjunto de
datos y, a continuación, enviarlo a otro componente en otro punto de la aplicación para que lo
procese. Esta facilidad significa que los componentes no necesitan consultar la base de datos de
forma individual. Un conjunto de datos de ADO.NET es una vista relacional de los datos que se
pueden representar en XML.
Espacio de nombres de conjunto de datos:

Figura 8.- Espacio de nombres de Conjuntos de Datos

Trabajo Teórico POO 10


De la Peña y Sánchez

Los métodos y objetos contenidos en un DataSet son coherentes con los del modelo de
base de datos relacional.

3.4.1 La DataTableCollection
Un DataSet de ADO.NET contiene una colección de cero o más tablas representadas por
objetos DataTable. La DataTableCollection contiene todos los objetos DataTable
de un DataSet.
Un DataTable se define en el espacio de nombres System.Data y representa una
única tabla de datos residentes en memoria. Contiene una colección de columnas representadas
por una DataColumnCollection y restricciones representadas por una
ConstraintCollection que, juntas, definen el esquema de la tabla. Un DataTable
también contiene una colección de filas representadas por la DataRowCollection, que
contiene los datos de la tabla. Junto con su estado actual, un DataRow conserva tanto la versión
original como la actual para identificar los cambios realizados en los valores almacenados en la
fila.

3.4.2 La DataRelationCollection
Un DataSet contiene relaciones en su objeto DataRelationCollection. Una relación,
representada por el objeto DataRelation, asocia las filas de un DataTable con las filas de
otro DataTable. Es análogo a una ruta de unión que podría existir entre las columnas de
claves externas y principales en una base de datos relacional. Un DataRelation identifica
columnas coincidentes en dos tablas de un DataSet.
Las relaciones permiten pasar de una tabla a otra dentro de un mismo DataSet. Los
elementos esenciales de un DataRelation son el nombre de la relación, el nombre de las
tablas relacionadas y las columnas relacionadas de cada tabla. Se pueden establecer relaciones
con más de una columna por tabla, para lo que debe especificar una selección de objetos
DataColumn como columnas clave. Cuando se agrega una relación al
DataRelationCollection, se puede agregar también un UniqueKeyConstraint y
un ForeignKeyConstraint para imponer restricciones de integridad cuando se realicen
cambios en los valores de las columnas relacionadas.

3.4.3 ExtendedProperties
El DataSet (así como el DataTable y el DataColumn) tiene una propiedad
ExtendedProperties. ExtendedProperties es un PropertyCollection en el
que se puede colocar información personalizada, como la instrucción SELECT que sirve para
generar el conjunto de resultados, o una marca de fecha y hora de cuándo se generaron los
datos. La colección ExtendedProperties se conserva con la información del esquema del
DataSet (así como el DataTable y el DataColumn).

3.4.4 Clasificación
Los conjuntos de datos pueden tener tipo o no.
¾ Un conjunto de datos con tipo se deriva en primer lugar de la clase base DataSet y, a
continuación, utiliza la información de un archivo de esquema XML (archivo .xsd) para
generar una clase nueva. La información del esquema (tablas, columnas, etc.) se genera y
compila en esta nueva clase de conjunto de datos como un conjunto de objetos y
propiedades de primera clase. Dado que una clase DataSet con tipo hereda de la clase
base DataSet, la clase con tipo asume toda la funcionalidad de la clase DataSet y

11 Trabajo Teórico POO


Acceso a Datos con ADO.NET

puede utilizarse con métodos que toman como parámetro una instancia de una clase
DataSet.
¾ Por el contrario, un conjunto de datos sin tipo no tiene el esquema integrado
correspondiente. Al igual que un conjunto de datos con tipo, un conjunto de datos sin tipo
contiene tablas, columnas, etc., pero sólo se exponen como colecciones. No obstante,
después de crear manualmente las tablas y otros elementos de datos de un conjunto de datos
sin tipo, se puede exportar la estructura del conjunto de datos en forma de esquema por
medio del método WriteXmlSchema del conjunto de datos.
La clase de un conjunto de datos con tipo tiene un modelo de objetos en el que las tablas y
las columnas se convierten en objetos de primera clase del modelo de objetos. Por ejemplo, si se
trabaja con un conjunto de datos con tipo, puede hacer referencia a una columna utilizando
código similar al siguiente:

// Se accede a la columna “CommonName” de la primera fila de la


//tabla “Plants”
string s;
s = miDataSet.Plants[0].CommonName;
Por el contrario, si se trabaja con un conjunto de datos sin tipo, el código sería:

//nota: casting necesario al trabajar sin tipos


s = (string) miDataSet.Tables["Plants"].Rows[0]["CommonName"];
El acceso con tipo además de ser más legible, es totalmente compatible con IntelliSense en
el editor de código de Visual Studio. El acceso a las tablas y las columnas de un conjunto de
datos con tipo también es algo más rápido en tiempo de ejecución porque el acceso se determina
en tiempo de compilación, no a través de colecciones en tiempo de ejecución.

3.5. Proveedores Datos


El otro elemento central de la arquitectura de ADO.NET es el proveedor de datos de .NET
Framework, cuyos componentes están diseñados expresamente para la manipulación de datos y
para el acceso rápido a datos de avance de sólo lectura.
Es posible escribir proveedores de datos de .NET Framework para cualquier origen de
datos.

3.5.1 Tipos proveedores de datos incluidos en .NET Framework 1.1


¾ Proveedor de datos de .NET Framework para SQL Server.
El proveedor de datos de .NET Framework para SQL Server utiliza su propio protocolo
para establecer comunicaciones con SQL Server (versión 7.0 o posterior).
Necesita incluir el espacio de nombres System.Data.SqlClient
¾ Proveedor de datos de .NET Framework para OLE DB.
Para utlizar este proveedor se debe usar un proveedor OLE DB compatible.
Proveedores que se han probado con ADO.NET.
Controlador Proveedor
SQLOLEDB Proveedor OLE DB para SQL Server de Microsoft
MSDAORA Proveedor OLE DB para Oracle de Microsoft
Microsoft.Jet.OLEDB.4.0 Proveedor OLE DB para Microsoft Jet

Trabajo Teórico POO 12


De la Peña y Sánchez

Necesita incluir el espacio de nombres System.Data.OleDb, y la instalación de


MDAC 2.6 o posterior.
¾ Proveedor de datos de .NET Framework para ODBC.
El proveedor de datos ODBC .NET está pensado para funcionar con todos los
controladores que cumplan las especificaciones ODBC
Necesita incluir el espacio de nombres System.Data.Odbc, y la instalación de
MDAC 2.6 o posterior.
¾ Proveedor de datos de .NET Framework para Oracle.
El proveedor de datos es compatible con la versión 8.1.7 y posteriores del software de
cliente de Oracle.
Necesita incluir el espacio de nombres System.Data.OracleClient, y la instalación
de MDAC 2.6 o posterior.

3.5.2 Objetos DataAdapter


El objeto xxxDataAdapter2 representa un conjunto de comandos de datos y una conexión a
base de datos que se utilizan para rellenar el conjunto de datos DataSet y actualizar el origen
de datos proporcionando el puente entre el objeto DataSet y el origen de datos. El
DataAdapter utiliza objetos xxxCommand para ejecutar comandos SQL en el origen de
datos tanto para cargar el DataSet con datos como para actualizar el origen de datos con los
cambios aplicados a los datos incluidos en el DataSet.
Generalmente, cada adaptador de datos intercambia datos entre una sola tabla de un origen
de datos y un solo objeto DataTable del conjunto de datos. Si el conjunto de datos contiene
varias tablas de datos, la estrategia habitual consiste en tener varios adaptadores de datos que le
suministren datos y los escriban de nuevo en tablas individuales del origen de datos.
Para llenar una tabla de un conjunto de datos, se llama a un método adaptador que ejecute
una instrucción SQL o un procedimiento almacenado. El adaptador crea un objeto lector de
datos (xxxDataReader) para leer los datos de un conjunto de datos.
Existe la opción de leer datos de la base de datos sin tener que almacenarlos en un conjunto
de datos, lo que puede ser muy eficiente en situaciones en las que estén implicados datos de sólo
lectura, así como se pueden ejecutar instrucciones SQL directamente, sin utilizarlas para llenar
un conjunto de datos.
De forma similar, cuando se desee actualizar la base de datos, se deberá invocar un método
adaptador que llame a la instrucción SQL o el procedimiento almacenado adecuados para
realizar la actualización real en la base de datos
Propiedades importantes:
- SelectCommand – referencia a un comando (instrucción SQL o nombre de
procedimiento almacenado) que recupera filas del almacén de datos.
- InsertCommand – referencia a un comando para insertar filas en un almacén de
datos.
- UpdateCommand – referencia a un comando para modificar filas en el almacén de
datos.

2
Dependiendo del proveedor de datos utilizado, sustitúyase “xxx” por: Sql, OleDb, Odbc, OrecleClient o el
que corresponda.

13 Trabajo Teórico POO


Acceso a Datos con ADO.NET

- DeleteCommand – referencia a un comando para eliminar filas del almacén de datos.


- TableMappings -- Los nombres de la base de datos y del conjunto de datos no tienen
por qué coincidir. Se pueden crear nuevos nombres de tabla y columna en el comando
del conjunto de datos y, a continuación, asignarlos a los nombres que se utilizan en la
base de datos. Los adaptadores utilizan la colección TableMappings para mantener
la correspondencia entre las estructuras del conjunto de datos (tablas de datos y
columnas de datos) y las estructuras del almacén de datos (tablas y columnas).

3.5.3 Objetos Connection


El objeto xxxConnection proporciona conectividad con un origen de datos.
Un adaptador de datos necesita una conexión abierta con un origen de datos para leer y
escribir datos. Por tanto, un adaptador utiliza objetos Connection para comunicarse con un
origen de datos.
El adaptador puede contener como máximo cuatro referencias de conexión, una para cada
tipo de acción que puede ejecutar: seleccionar, actualizar, insertar y eliminar (asociadas a sus
propiedades).
El objeto Connection representa una sesión única dentro del origen de datos. Todos los
objetos de conexión proporcionan propiedades para establecer y modificar los detalles de la
conexión (como el identificador de usuario, la contraseña y el tiempo de espera). También
proporcionan métodos para iniciar, confirmar y deshacer transacciones de base de datos.
Se recomienda cerrar siempre el objeto Connection al terminar de utilizarlo para que la
conexión se devuelva a la agrupación. Esta operación se puede realizar mediante los métodos
Close o Dispose del objeto Connection:

Ejemplos De Conexión

¾ Conectar a SQL Server


SqlConnection conector =
new SqlConnection(“Data Source=localhost;”+
“Integrated Security=SSPI;”+
“Initial Catalog=prueba”);
conector.Open();

conector.Close(); //ó conector.Dispose();

¾ Conectar con un origen de datos OLE DB


OleDbConnection conector =
new OleDbConnection(“Provider=SQLOLEDB;”+
“Data Source=localhost;”+
“Integrated Security=SSPI;”+
“Initial Catalog=prueba”);
conector.Open();

conector.Close(); //ó conector.Dispose();

Trabajo Teórico POO 14


De la Peña y Sánchez

¾ Conectar con un origen de datos ODBC


OdbcConnection conector =
New OdbcConnection(“DRIVER={MySQL ODBC 3.51 Driver};”+
“SERVER=localhost;”+
“DATABASE=prueba;”+
“USER=naskar;”);
conector.Open();

conector.Close(); //ó conector.Dispose();

¾ Conectar con un origen de datos Oracle


OracleConnection conector =
new OracleConnection(“Data Source=MyOracleServer;”+
“Integrated Security=yes;”);
conector.Open();

conector.Close(); //ó conector.Dispose();

¾ Conectar con un origen de datos MySQL3


string conexion = "Database=prueba;Data Source=localhost;"+
"User Id=naskar;";

MySqlConnection conector = new MySqlConnection(conexion);


conector.Open();

conector.Close(); //ó conector.Dispose();

3.5.4 Objetos DataReader


xxxDataReader proporciona una secuencia de datos de alto rendimiento, de sólo lectura
y sólo hacia delante, a partir de un origen de datos.
Siempre se debe llamar al método Close cuando haya terminado de usar el objeto
DataReader.
Si Command contiene parámetros de salida o valores devueltos, éstos no estarán
disponibles hasta que se cierre el DataReader.
Mientras está abierto un DataReader, éste usa de forma exclusiva el objeto
Connection. Por eso no podrá ejecutar ningún comando en el objeto Connection, ni
siquiera el de creación de otro DataReader, hasta que se cierre el DataReader original.

A la hora de decidir si una aplicación debe utilizar un DataReader o un DataSet se


debe tener en cuenta el tipo de funcionalidad que la aplicación requiere.
Se usará un DataSet para:
¾ Utilizar datos de forma remota entre un nivel y otro o desde un servicio Web XML.
¾ Interactuar con datos dinámicamente, por ejemplo para enlazar con un control de
Windows Forms o para combinar y relacionar datos procedentes de varios orígenes.

3
Requiere la instalación de MySQL® Connector/Net

15 Trabajo Teórico POO


Acceso a Datos con ADO.NET

¾ Almacenar datos en memoria caché localmente, dentro de su aplicación.


¾ Proporcionar una vista XML jerárquica de datos relacionales y utilizar herramientas
como una transformación XSL o una consulta Xpath (XML Path Language) en sus
datos.
¾ Realizar procesamientos exhaustivos de datos sin necesidad de tener una conexión
abierta con el origen de datos, lo que libera la conexión para que la utilicen otros
clientes.
Si no se necesita la funcionalidad proporcionada por el DataSet, se puede mejorar el
rendimiento de la aplicación si se utiliza DataReader para devolver los datos de sólo avance
y de sólo lectura.
Aunque el DataAdapter usa el DataReader para rellenar el contenido de un
DataSet, al utilizar el DataReader se puede mejorar el rendimiento porque no usará la
memoria que utilizaría el DataSet, además de evitar el procesamiento necesario para crear y
rellenar el contenido del DataSet.

3.5.5 Objetos Command


El objeto xxxCommand representa una instrucción SQL o un procedimiento almacenado que
ejecutar en un origen de datos, por lo que permite tener acceso a comandos de base de datos
para devolver datos, modificar datos, ejecutar procedimientos almacenados y enviar o recuperar
información sobre parámetros.
El objeto Command posee varios métodos Execute:
¾ ExecuteReader
Cuando los resultados se devuelven en forma de secuencia de datos, se usa para devolver un
objeto DataReader.
Ejemplo:
string conexion = "Database=prueba;Data Source=localhost;"+
"User Id=naskar;";

MySqlConnection Connection = new MySqlConnection(conexion);


MySqlCommand Comando =
new MySqlCommand("SELECT * FROM plants",Connection);

Connection.Open();
MySqlDataReader Lector = Comando.ExecuteReader();

//en la tabla “plants” hay 3 strings y 1 int


while(Lector.Read())
Console.WriteLine(Lector.GetString(0)+" - "+
Lector.GetString(1)+" - "+
Lector.GetUInt32(2)+" – "+
Lector.GetString(3)+"\n");

Lector.Close();
Connection.Close();

Trabajo Teórico POO 16


De la Peña y Sánchez

¾ ExecuteNonQuery
Se utiliza para ejecutar comandos que no devuelven filas (realizar operaciones en la base de
datos y modificar datos).
Mediante un proveedor de datos de .NET Framework se puede ejecutar procedimientos
almacenados o instrucciones de DDL (CREATE TABLE…) para manipular los esquemas de
una base de datos o catálogo. El objeto Command proporciona un método
ExecuteNonQuery para procesarlos.
Además de para modificar esquemas, este método se puede usar también para procesar
instrucciones SQL que modifican datos sin devolver ninguna fila, como INSERT, UPDATE y
DELETE.
El método ExecuteNonQuery devuelve un entero que representa el número de filas que
se ven afectadas por la instrucción o por el procedimiento almacenado que se haya ejecutado
Ejemplo para realizar operaciones de catálogo

//crea una tabla e inserta una tupla en ella


string conexion = "Database=prueba;Data Source=localhost;"+
"User Id=naskar";

MySqlConnection Connection = new MySqlConnection(conexion);


MySqlCommand Comando =
new MySqlCommand("Create table latabla"+
"(dni varchar(10) primary key,"+
"nombre varchar(15))",Connection);

Connection.Open();
Comando.ExecuteNonQuery();
Comando.CommandText="insert into latabla values "+
"(\"123456\",\"yomismo\")";
Comando.ExecuteNonQuery();
Connection.Close();

¾ ExecuteScalar Este método devuelve como valor escalar el correspondiente a la


primera columna de la primera fila del conjunto de resultados.

3.6. Leer y actualizar con Adaptadores de Datos. Ejemplos


El propósito principal del adaptador de datos es la comunicación de datos entre un almacén
de datos y un conjunto de datos. El adaptador admite métodos específicos para mover datos de
uno a otro. Se puede utilizar un adaptador de datos para ejecutar las operaciones siguientes:
¾ Recuperar filas de un almacén de datos para las tablas de datos correspondientes dentro del
conjunto de datos. Para recuperar filas en un conjunto de datos, se utiliza el método Fill
en un objeto DataAdapter. Cuando se llama al método Fill, se transmite una
instrucción SELECT de SQL al almacén de datos.
¾ Transmitir los cambios realizados en una tabla de un conjunto de datos al almacén de datos
correspondiente. Para transmitir una tabla del conjunto de datos al almacén de datos, se
utiliza el método Update del adaptador. Cuando se invoque el método, ejecutará las
instrucciones SQL INSERT, UPDATE o DELETE necesarias, según se vaya a crear,
modificar o eliminar el registro afectado

17 Trabajo Teórico POO


Acceso a Datos con ADO.NET

Los métodos Fill y Update abren de forma implícita el objeto Connection que
utiliza el DataAdapter cuando determina que esa conexión no está abierta. Cuando uno de
los métodos ha abierto la conexión, el mismo método la cierra cuando termina de usarla. Este
hecho simplifica el código cuando se trata de una operación única. Sin embargo, en el caso de
que se estén realizando múltiples operaciones que necesiten tener abierta una conexión, se
puede mejorar el rendimiento de la aplicación si se llama explícitamente al método Open de
Connection, se realizan a continuación las operaciones en el origen de datos y, finalmente, se
llama al método Close de Connection.

3.6.1 Llenar un DataSet desde un DataAdapter


Para llenar un conjunto de datos se pueden seguir varios procedimientos:
¾ Llamar al método Fill de un adaptador de datos. Esto provoca que el adaptador ejecute
una instrucción SQL o un procedimiento almacenado y guarde los resultados en una tabla
del conjunto de datos. Si el conjunto de datos contiene varias tablas, es probable que se
tengan adaptadores de datos independientes para cada tabla y, en consecuencia, se deberá
llamar al método Fill de cada adaptador por separado.
¾ Llenar manualmente las tablas del conjunto de datos; para ello, cree objetos DataRow y
agréguelos a la colección Rows de la tabla. Esto sólo se puede hacer en tiempo de
ejecución; no se puede establecer la colección Rows en tiempo de diseño.
¾ Leer un documento o una secuencia XML para el conjunto de datos. método ReadXml.
¾ Combinar (copiar) el contenido de otro conjunto de datos. método DataSet.Merge.
Con un DataSet se puede usar un número ilimitado de DataAdapters. Cada
DataAdapter se puede utilizar para llenar uno o varios objetos DataTable
Ejemplo usando el método Fill

//muestra el contenido de la tabla “plants”


string conexion = "Database=prueba;Data Source=localhost;"+
"User Id=naskar";
MySqlConnection Connection = new MySqlConnection(conexion);

MySqlCommand selectCMD =
new MySqlCommand("SELECT * from plants", Connection);

MySqlDataAdapter da = new MySqlDataAdapter();


da.SelectCommand = selectCMD;

DataSet ds = new DataSet();


da.Fill(ds, "Plantitas");
DataTable tabla = ds.Tables["Plantitas"]; //o ds.Tables[0];

foreach(DataRow fila in tabla.Rows)


{
for(int i=0; i<tabla.Columns.Count; i++)
Console.WriteLine(fila[i]+"\t");
Console.WriteLine("\n");
}

Trabajo Teórico POO 18


De la Peña y Sánchez

3.6.2 Actualizar la base de datos con un DataAdapter y el DataSet


Cuando se realizan cambios en los registros de un conjunto de datos, es necesario escribir los
cambios en la base de datos.
El método Update de DataAdapter se llama para reflejar en el origen de datos los
cambios efectuados en un DataSet, el procedimiento es el siguiente:
El DataAdapter utiliza el objeto Connection del proveedor de datos de .NET
Framework para establecer una conexión con un origen de datos, así como objetos Command
para recuperar datos de un origen de datos y reflejar en él los cambios que se efectúen.
El método Update, al igual que el método Fill, acepta como argumentos una instancia
de un DataSet y, de forma opcional, un objeto DataTable o un nombre de DataTable.
Al llamar al método Update, el DataAdapter analiza los cambios efectuados y ejecuta
el comando apropiado (INSERT, UPDATE o DELETE), esto se realiza de la siguiente manera:
Cuando el DataAdapter encuentra un cambio en una DataRow4, utiliza los comandos
InsertCommand, UpdateCommand o DeleteCommand para reflejarlo. De esta forma, se
obtiene el máximo rendimiento de la aplicación de ADO.NET al especificar la sintaxis del
comando en la fase de diseño y utilizar, siempre que es posible, procedimientos almacenados.
Antes de llamar a Update debe establecer de forma explícita los comandos. Si se llama a
Update y el comando correspondiente a una actualización determinada no existe (por ejemplo,
no hay un comando DeleteCommand para las filas eliminadas), se inicia una excepción.
No obstante también podemos usar el objeto “xxxCommandBuilder“ que generará
automáticamente los comandos de actualización, inserción y borrado.

Ejemplo CommandBuilder

//Inserta una tupla en la tabla “plants” generando


//automáticamente los comandos correspondientes, utilizando para
//ello el objeto CommandBuilder

string conexion = "Database=prueba;Data Source=localhost;"+


"User Id=naskar";
MySqlConnection Connection = new MySqlConnection(conexion);
MySqlDataAdapter da =
new MySqlDataAdapter("SELECT * FROM plants",Connection);

DataSet dat = new DataSet();


da.Fill(dat,"Plantas");

DataTable tabla = dat.Tables["Plantas"];


DataRow fila = tabla.NewRow();

4
La clase DataRow, que se utiliza para manipular registros individuales, incluye la propiedad RowState, cuyos
valores indican si la fila cambió, y de qué modo, desde que la tabla de datos se cargó por primera vez desde la base de
datos. Entre los posibles valores se encuentran Deleted, Modified, New y Unchanged. El método Update
examina el valor de la propiedad RowState para determinar qué registros deben escribirse en la base de datos y qué
comando específico de la base de datos (agregar, editar, eliminar) debe invocarse.

19 Trabajo Teórico POO


Acceso a Datos con ADO.NET

fila[0]="nombre comun";
fila[1]="nombre latino";
fila[2]=100; //id
fila[3]="nombre catalogo";

tabla.Rows.Add(fila);
MySqlCommandBuilder comandos = new MySqlCommandBuilder(da);

Connection.Open();
Console.WriteLine("Comando...:\n"+
comandos.GetInsertCommand().CommandText+"\n");
da.Update(dat,"Plantas");
Connection.Close();

Salida por pantalla:

Comando...:
INSERT INTO `plants` (`CommonName`, `LatinName`, `TypeID`, `CatalogsNew_ID`)
VALUES (?CommonName, ?LatinName, ?TypeID, ?CatalogsNew_ID);
SELECT `CommonName`, `LatinName`, `TypeID`, `CatalogsNew_ID` FROM `plants`
WHERE (`CommonName`=?CommonName)

NOTA: El símbolo ‘?’ mostrado es utilizado para el trabajo con parámetros, a continuación este
ejemplo ilustrará de forma práctica el uso de parámetros

string conexion = "Database=prueba;Data Source=localhost;"+


"User Id=naskar;Password=";
MySqlConnection Connection = new MySqlConnection(conexion);
MySqlDataAdapter da =
new MySqlDataAdapter("SELECT * FROM plants",Connection);

da.UpdateCommand =
new MySqlCommand("UPDATE plants SET LatinName=?LatinName "+
"WHERE TypeID=100" , Connection);

//se añade un parámetro a la colección


da.UpdateCommand.Parameters.Add("?LatinName",
MySqlDbType.VarChar, 15, "LatinName");

DataSet dat = new DataSet();


da.Fill(dat,"Plantas");

dat.Tables["Plantas"].Rows[0]["LatinName"]="plantus silvestris";
da.Update(dat,"Plantas");

Trabajo Teórico POO 20


De la Peña y Sánchez

4. Conclusiones
ADO.NET ofrece varias ventajas sobre las anteriores versiones de ADO y sobre otros
componentes de acceso a datos. Estas ventajas se incluyen en las siguientes categorías:
¾ Interoperabilidad
Cualquier componente que pueda leer XML podrá procesar los datos, así el
componente transmisor puede transmitir simplemente el conjunto de datos a su destino,
independientemente de cómo esté implementado el componente receptor. El componente de
destino podría ser una aplicación de Visual Studio o cualquier otra aplicación implementada
con cualquier herramienta. El único requisito es que el componente receptor pueda leer
XML.
¾ Programabilidad
Los componentes de datos ADO.NET encapsulan funcionalidad de acceso a datos de
diversas formas que ayudan a programar de modo más rápido y con menos errores. Por
ejemplo, los comandos de datos condensan la tarea de generar y ejecutar instrucciones SQL
o procedimientos almacenados.
¾ Rendimiento y Escalabilidad.
Dado que se puede trabajar en modo desconectado, el rendimiento en las aplicaciones
se ve notablemente aumentado, sobre todo en aquellas que tengan una carga elevada de
transacciones.
Por lo tanto ADO.NET anima a los programadores a ahorrar recursos limitados. Las
aplicaciones ADO.NET utilizan un acceso desconectado a los datos, por lo que no retienen
bloqueos ni conexiones activas con bases de datos durante largos periodos de tiempo lo que
facilita enormemente la escalabilidad ya que una aplicación Web no funcionará igual con
unos pocos usuarios que con cientos de ellos.

5. Bibliografía
[1] Charte Ojeda F. “Visual C# .NET”. EDICIONES ANAYA MULTIMEDIA, 2002.
[2] Sceppa D. “Microsoft ADO.NET”. MICROSOFT PRESS, 2002.
[3] Skinner J, et al. “Professional ADO.NET Programming”. WROX PRESS, 2001.
[4] Riordan R. “Microsoft ADO .NET Step by Step., MICROSOFT PRESS, 2002
[5] Chand M. “A Programmer’s Guide to ADO.NET in C#”. APRESS, 2002.
[6] Beauchemin B. “Essential ADO.NET“. ADDISON WESLEY, 2002.
[7] Joubert T. “ADO .NET Programming”. WORDWARE PUBLISHING, 2003
[8] “Programming with ADO.NET, Delivery Guide”. MSDN TRAINNING, 2001.
[9] Price J. “Mastering C# Database Programming”. SYBEX, 2003.
[10] Hamilton B. “ADO.NET Cookbook”. O’REILLY, 2003.
[11] Deitel. “C# How To Program”. PRENTICE HALL, 2002
[12] Kimmel P. “Advanced C# Programming”. MCGRAW-HILL, 2002.

21 Trabajo Teórico POO


Acceso a Datos con ADO.NET

6. Enlaces
¾ http://www.ciberteca.net/articulos/programacion/net/default.asp Análisis comparativo entre
Microsoft® .NET y Sun® J2EE
¾ http://www.microsoft.com/spanish/msdn/netframework/productinfo/overview.asp
Información general sobre .NET de Microsoft.
¾ http://www.desarrolloweb.com/articulos/1328.php?manual=48 Arquitectura básica de la
plataforma .Net. Descripción del Framework y sus principales componentes: Lenguajes,
biblioteca de clases y CLR.
¾ http://www.gratisweb.com/jesus_gonzales/NetFrmework.htm Más información sobre .NET
Framework.
¾ http://www.microsoft.com/Net/Basics.aspx Página oficial de .NET.
¾ http://communities.microsoft.com/newsgroups/default.asp?icp=Latam&slcid=es&Newsgro
up=microsoft.public.es.ado Comunidad hispana de ADO.NET.
¾ http://www.elguille.info/NET/ Información de elguille (uno de los más conocidos MVP de
Microsoft) sobre .NET Framework y lenguajes punto NET.
¾ http://www.c-sharpcorner.com/ Una de las páginas más completas sobre C#
¾ http://www.microsoft.com/spanish/msdn/spain/default.asp Página de desarrollo con
herramientas de Microsoft.

Trabajo Teórico POO 22

Vous aimerez peut-être aussi