Como ya se menciono, la Base Class Library
constituye los fundamentos de la .NET Framework Class Library, ya que provee la
mayor parte de las funcionalidades elementales que pueden necesitarse para
construir una aplicación o servicio. En
la imagen se pueden apreciar los namespaces más importantes que componen la
BCL.
4.2.- ADO.NET
Acceso a Datos:
ADO.NET

ADO.NET es un subconjunto de la .NET Framework
Class Library, que contiene todas las funcionalidades necesarias para
conectarse e interactuar con dos tipos de repositorios permamentes de
información:
1)
Bases de Datos, como Microsoft SQL Server
(clases del namespace System.Data, que se encuentran compiladas en
System.data.dll)
2)
Archivos XML (clases del namespace System.XML,
que se encuentran compiladas en System.Xml.dll)
Acceso a Bases de
Datos Relacionales Escenario Conectado:
·
Un
entorno conectado es uno en el cual los usuarios están constantemente
conectados a la fuente de datos
·
Ventajas:
-
Mayor
seguridad
-
Mejor
control de concurrencia
-
Los
datos se mantienen actualizados
-
Se
requiere una conexión constante (consume recursos del servidor)
-
Escalabilidad
En la actualidad se plantean dos tipos de
escenarios de acceso a bases de datos relacionales. El primero de ellos es el
que se conoce como “Escenario Conectado”, ya que en él se requiere una conexión
física establecida con el servidor de datos durante todo momento para poder
efectuar cualquier consulta o actualización sobre los datos.
Esto tiene algunas ventajas y también sus
desventajas.
Algunas Ventajas:
•
Al
haber una única conexión a la base de datos por usuario, o incluso a veces por
aplicación, establecida permanentemente, puede llegar a resultar más sencillo
administrar la seguridad y el acceso al servidor de datos. Lo mismo ocurre con
el control de concurrencia: en un escenario donde múltiples usuarios se
estuvieran conectando y desconectando permanentemente para realizar distintas
acciones, este control sería más difícil de llevar.
•
Siempre
la aplicación tiene acceso a los datos actualizados
Algunas Desventajas:
•
Se
requiere una conexión abierta todo el tiempo con el servidor de base de datos,
lo cual consume recursos innecesariamente si no se la está utilizando.
La escalabilidad del acceso a los datos se ve
limitada por la cantidad de conexiones establecidas simultáneamente contra el
servidor de base de datos.
Acceso a Bases de
Datos Relacionales Escenario Desconectado:
·
En
un entorno desconectado, una parte de los datos del repositorio central se
copia y modifica en forma local, para luego sincronizarse con éste.
-
Se
puede trabajar en forma independiente
-
Mayor
escalabilidad y performance
-
Los
datos no están sinconizados
-
Resolución
manual de conflictos
El segundo escenario de acceso a bases de datos
relacionales se conoce como “Escenario Desconectado”, ya que en él una parte de
los datos del servidor central se copia localmente y puede luego ser consultada
y actualizada sin contar con una conexión abierta. Luego si se desea puede
establecerse una conexión con el servidor de base de datos para sincronizar los
cambios efectuados sobre la copia local y actualizar los datos. Este tipo de
funcionalidad es particularmente útil para escenarios de usuarios móviles, que
salen de su oficina con una laptop, un SmartPhone o una PocketPC y desean poder
continuar trabajando por más que no tengan conectividad física con el servidor
de base de datos ubicado en la red interna de la empresa.
Algunas ventajas que provee un escenario de acceso a datos
desconectado son:
•
La
posibilidad de trabajar sobre los datos independientemente del resto de los
usuarios de la aplicación
•
Mayor
escalabilidad en el acceso a datos y utlización más óptima de recursos del
servidor, ya que se mantiene en un mínimo indispensable la cantidad y duración
de conexiones abiertas.
•
Mayor
performance, al trabajar con una copia local de los datos.
Algunas Desventajas:
•
Puede
ocurrir que en un momento dado un usuario no esté accediendo a los datos más
actualizados del repositorio central
•
Al
momento de sincronizar los cambios efectuados localmente contra el repositorio
central pueden surgir conflictos, los cuales deben ser resueltos manualmente.
ADO.NET soporta el
acceso a datos tanto en escenarios conectados como desconectados.
ADO.NET - Arquitectura

La arquitectura de ADO.NET está basada en el
concepto de proveedores de acceso a datos, siendo un proveedor un conjunto de
clases que permiten conectarse a una base de datos, ejecutar un comando sobre
ella y tener acceso a los resultados de su ejecución, tanto de forma conectada
como desconectada.
ADO.NET- Proveedores
de Acceso a Datos:
·
SQL
Server/Access (System.Data.SqlClient)
·
OLE
DB (System.Data.OleDb)
·
ODBC
(System.Data.Odbc)
·
Oracle
(System.Data.OracleClient)
·
Otros
provistos por terceros (MySQL, PostgreSQL, DB2, etc..)
Los proveedores de acceso a datos ADO.NET
(conocidos como “Managed Data Providers”) representan conjuntos específicos de
clases que permiten conectarse e interactuar con una base de datos, cada uno
utilizando un protocolo particular. El .NET Framework incluye cuatro
proveedores de acceso a datos, que en conjunto le permiten conectarse e
interactuar virtualmente con cualquier base de datos existente en la
actualidad:
•
Data Provider For SQL Server: es el proveedor de acceso nativo a servidores
de bases de datos Microsoft SQL Server 7.0 o superior, y Microsoft Access. Al
conectarse via protocolos nativos de bajo nivel, povee la alternativa más
performante para conexiones contra estos motores de bases de datos. Sus clases
se encuentran en el namespace System.Data.SqlClient.
•
Data Provider For OLE DB: es el proveedor de acceso a datos que permite interactuar via el
protocolo estándar OLE DB con cualquier repositorio de datos que lo soporte.
Sus clases se encuentran en el namespace System.Data.OleDb.
•
Data Provider For ODBC: es el proveedor de acceso a datos que permite interactuar via el
protocolo estándar ODBC con cualquier repositorio de datos que lo soporte. Sus
clases se encuentran en el namespace System.Data.Odbc.
•
Data Porvider For Oracle: es el proveedor de acceso nativo a bases de datos Oracle, desarrollado
por Microsoft utilizando las herramientas de conectividad de Oracle. De esta
forma puede lograrse un acceso más performante a bases de datos Oracle desde
aplicaciones .NET que utilizando ODBC u OLE DB. Sus clases se encuentran en el
namespace System.Data.OracleClient, y están compiladas en un assembly diferente
al resto: System.Data.OracleClient.dll.
ADO.NET provee una arquitectura extensible,
posibilitando que terceras partes creen sus propios proveedores de acceso
nativo para aplicaciones .NET. Algunos ejemplos de esto son:
•
Data
Provider For DB2, desarrollado por IBM
•
Oracle
Data Provider For .NET, desarrollado por Oracle
•
Providers
de acceso nativo a bases de datos OpenSource, como MySQL y PostgreSQL
Es importante volver a destacar que utilizando
estos proveedores de acceso a datos cualquier aplicación .NET puede utilizar
casi cualquier base de datos relacional existente en la actualidad como
respositorio de información persistente (esto incluye, además de MS SQL Server, a IBM
DB2, Oracle, Sybase, Informix, TeraData, MySQL y PostgreSQL, entre otras).
ADO.NET – Clases más comunes
En la imágen se pueden apreciar las clases más
comunes que componen a todos los proveedores de acceso a datos de ADO.NET.
Nótese que algunos nombres empiezan con las letras “Xxx”: esto se debe a que
los nombres de esas clases varían según el proveedor específico que se esté
utilizando. Por ejemplo, la clase que representa una conexión con la base de
datos usando el Data Provider For Sql Server es “SqlConnection”, mientras que
si usamos el Data Provider For Oracle podemos obtener la misma funcionalidad de
la clase “OracleConnection”. Mas allá del ejemplo, pasemos a describir cada una
de estas clases y su funcionalidad:
●
XxxConnection:
representa una conexión. Almacena, entre otras cosas, el string de conexión
(connection string), y permite conectarse y desconectarse con una base de
datos.
●
XxxCommand:
permite almacenar y ejecutar una instrucción SQL contra una base de datos,
enviando parámetros de entrada y recibiendo parámetros de salida.
Estas dos clases se utilizan tanto en
escenarios conectados como desconectados.
●
XxxDataReader:
permite acceder a los resultados de la ejecución de un comando contra la base
de datos de manera read-only (sólo lectura), forward-only (sólo hacia
adelante). Esta clase se utiliza en escenarios conectados, ya que no es posible
operar sobre los registros de un DataReader estando desconectado de la fuente
de datos.
XxxDataAdapter y DataSet: en conjunto, estas
clases constituyen el corazón del soporte a escenarios desconectados de
ADO.NET. El DataSet es una representación en memoria de una base de datos
relacional, que permite almacenar un conjunto de datos obtenidos mediante un
DataAdapter. El DataAdapter actúa como intermediario entre la base de datos y
el DataSet local desconectado. Una vez que el DataSet se encuentra lleno con
los datos que se necesitan para trabajar, la conexión con la base de datos
puede cerrarse sin problemas y los datos pueden ser modificados localmente. Por
último, el DataAdapter provee un mecanismo para sincronizar los cambios locales
contra el servidor de base de datos. Nótese que la clase System.Data.DataSet no
tiene el prefijo Xxx, ya que es independiente del proveedor de acceso a datos
utilizado.
ADO.NET – DataSet
Como ya se ha mencionado, el DataSet es una
representación residente en memoria de datos relacionales, independiente de la
base de datos y del protocolo utilizado para interactuar con la misma. Un
DataSet, al igual que una base de datos, está compuesto por un conjunto de
tablas (colección de clases “DataTable”), cada una de las cuales está compuesta
a su vez por un conjunto de filas (colección de clases “DataRow”) y columnas
(colección de clases “DataColumn”). Dentro de un DataSet pueden establecerse
relaciones entre DataTables, y hasta restricciones de integridad referencial
(Claves Primarias y Foráneas). Internamente, los DataSets representan toda su
estructura y datos contenidos en formato XML.
ADO.NET es el sucesor de ADO (ActiveX Data
Objects), la biblioteca de acceso a datos de la plataforma COM. Si bien ADO
soporta sólo escenarios conectados, puede resultar útil hacer una analogía de
las clases más comunes utilizadas en ADO con respecto a sus nuevas versiones en
ADO.NET:
•
La
clase Connection de ADO tiene su paralelo en las clases XxxConnection de los
distintos proveedores de ADO.NET
•
La
clase Command de ADO tiene su paralelo en las clases XxxCommand de los
distintos proveedores de ADO.NET
•
La
clase Recordset de ADO dejó de existir como tal en ADO.NET. En su lugar existen
en ADO.NET las clases XxxDataReader (es lo más parecido a un Recordset
read-only forward-only de ADO), y las nuevas clases DataSet y XxxDataAdapter
para escenarios desconectados.
ADO.NET – Accediendo a Datos Conectado
·
En
un escenario conectado, los recursos se mantienen en el servidor hasta que la
conexión se cierra
·
1)
Abrir Conexión
·
2)
Ejecutar Comando
·
3)
Procesar Filas en DataReader
·
4)
Cerrar Reader
·
5)
Cerrar Conexión
ADO.NET –
Accediendo a Datos Desconectado
·
En
un escenario desconectado, los recursos no se mantienen en el servidor mientras
los datos se procesan
·
1)
Abrir Conexión
·
2)
Llenar DataSet mediante DataAdapter
·
3)
Cerrar Conexión
·
4)
Procesar DataSet
·
5)
Abrir Conexión
·
6)
Actualizar fuente de datos mediante DataAdapter
·
7)
Cerrar Conexión
ADO.NET – Soporte a XML
Las clases que se muestran en la diapositiva
ilustran una parte del extenso soporte a XML provisto por el .NET Framework,
que va desde la simple lectura de un documento XML a su navegación, búsqueda y
transformaciones complejas.
•
XmlReader –
clase abstracta cuyo propósito es proveer un mecanismo de lectura forward-only
de un documento XML. Tiene tres clases derivadas:
•
XmlTextReader
– utilizada para leer datos de un documento XML o un stream. Se utiliza
normalmente cuando la performance de lectura es un factor clave y todo el
sobreprocesamiento de DOM debe evitarse.
•
XmlValidatingReader – similar a XmlTextReader, pero pensada para validaciones DOM.
•
XmlNodeReader
– permite leer datos de un nodo XML.
•
XmlTextWriter
– permite que datos XML puedan ser
escritos a un archivo XML o a un stream, y puede además proveer mecanismos de
validación para asegurar que sólo datos XML válidos y bien formados sean
escritos.
•
XmlDocument
– esta es una clase compleja que actúa como un contenedor de datos XML,
representando en un modelo de objetos en memoria toda la esctructura de un
documento XML. Esto permite tener facilidades de navegación y edición, pero a
un cierto costo de performance y consumo de recursos.
•
DocumentNavigator – permite navegar libremente la estructura de un documento XML una vez
que ha sido cargado dentro de una instancia de la clase XmlDocument.
4.3.- Windows Forms
El namespace System.Windows.Forms contiene las clases necesarias para crear
aplicaciones basadas en formularios y ventanas de Windows, que aprovechan al
máximo todas las posibilidades que el sistema operativo Windows tiene para
ofrecer en términos de interfaz de usuario. Entre estas clases podemos
encontrar además formularios, cuadros de diálogo y controls gráficos necesarios
para construir una interfaz de usuario rica.
4.4.- ASP.NET
ASP.NET es un subconjunto de la .NET Framework
Class Library que contiene las funcionalidades necesarias para desarrollar
aplicaciones y servicios Web, y sus clases se encuentran dentro del namespace
System.Web. ASP.NET no es sólo la nueva versión de su predecesor, ASP, sino que
provee un nuevo modelo unificado de programación orientada a objetos que
permite hacer uso de todos los servicios y facilidades del .NET Framework
programando en cualquier lenguaje compatible con la plataforma. Por otra parte,
nuevos servicios a nivel de infraestructura (seguridad, performance,
estabilidad, configuración, instalación, mantenimiento) hacen que ASP.NET sea
ideal para construir aplicaciones web de porte empresarial y misión crítica.