ADO.NET es una evolución del modelo de
acceso a datos de ADO que
controla directamente los requisitos del usuario para programar
aplicaciones escalables. Se diseñó
específicamente para el Web, teniendo en
cuenta la escalabilidad, la independencia
y el estándar XML.
ADO.NET utiliza algunos objetos ADO, como
Connection y Command, y también agrega
objetos nuevos. Algunos de los nuevos objetos clave de ADO.NET
son DataSet, DataReader y
DataAdapter.
La diferencia más importante entre esta fase
evolucionada de ADO.NET y las arquitecturas de datos anteriores
es que existe un objeto, DataSet, que es independiente y
diferente de los almacenes de
datos. Por ello, DataSet funciona como una entidad
independiente. Se puede considerar el objeto DataSet como un
conjunto de registros que
siempre está desconectado y que no sabe nada sobre el
origen y el destino de los datos que contiene. Dentro de un
objeto DataSet, de la misma manera que dentro de una
base de datos,
hay tablas, columnas, relaciones, restricciones, vistas,
etc.
El objeto DataAdapter es el objeto que se conecta
a la base de datos
para llenar el objeto DataSet. A continuación, se
vuelve a conectar a la base de datos para actualizar los datos de
dicha base de datos a partir de las operaciones
realizadas en los datos contenidos en el objeto DataSet.
En el pasado, el procesamiento de
datos se basaba principalmente en la conexión. Ahora,
con el fin de proporcionar a las aplicaciones multinivel mayor
eficacia, se
está adoptando para el procesamiento de
datos un enfoque basado en mensajes que manipulan fragmentos
de información. En el centro de este enfoque
se sitúa el objeto DataAdapter, que proporciona un
puente entre un objeto DataSet y un almacén de
datos de origen para recuperar y guardar datos. Para ello,
envía solicitudes a los comandos SQL apropiados
que se ejecutan en el almacén de
datos.
El objeto DataSet basado en XML proporciona
un modelo de
programación coherente que funciona con
todos los modelos de
almacenamiento de
datos: sin formato, relacional o jerárquico. Funciona sin
tener 'conocimiento'
del origen de los datos y representa a los datos que contiene
como colecciones y tipos de datos.
Independientemente del origen de los datos del objeto
DataSet, éstos se manipulan mediante el mismo
conjunto de API estándar expuestas a través del
objeto DataSet y sus objetos subordinados.
Aunque el objeto DataSet no tiene conocimiento
del origen de sus datos, el proveedor administrado tiene información detallada y específica.
La función
del proveedor administrado es conectar, llenar y almacenar el
objeto DataSet desde almacenes de
datos (o viceversa). Los proveedores de
datos OLE DB y SQL Server de
.NET (System.Data.OleDb y System.Data.SqlClient) que forman parte
de .Net Framework proporcionan cuatro objetos básicos:
Command, Connection, DataReader y
DataAdapter. En el resto de las secciones de este
documento, se describirá cada parte del objeto
DataSet y los proveedores de
datos OLE DB y SQL Server de
.NET, con el fin de explicar qué son y cómo se
pueden utilizar al programar.
En las siguientes secciones se presentarán
algunos objetos que han evolucionado desde la tecnología anterior y
otros objetos nuevos. Los objetos son los siguientes:
- Objetos Connection. Para conectar con una base
de datos y administrar las transacciones en una base de
datos. - Objetos Command. Para emitir comandos
SQL a una
base de datos. - Objetos DataReader. Proporcionan una forma de
leer una secuencia de registros de
datos sólo hacia delante desde un origen de datos SQL
Server. - Objetos DataSet. Para almacenar datos sin
formato, datos XML y datos relacionales, así como para
configurar el acceso remoto y programar sobre datos de este
tipo. - Objetos DataAdapter. Para insertar datos en un
objeto DataSet y reconciliar datos de la base de
datos.
Nota al trabajar con conexiones a una base de
datos, hay dos opciones diferentes: un proveedor de datos de SQL
Server de .NET (System.Data.SqlClient) y un proveedor de datos
OLE DB de .NET (System.Data.OleDb). En estos ejemplos se
utilizará el proveedor de datos SQL Server de .NET.
Están programados para comunicarse directamente con
Microsoft SQL
Server. El proveedor de datos OLE DB de .NET se utiliza para
comunicarse con cualquier proveedor OLE DB (ya que utiliza OLE DB
como tecnología subyacente).
Para establecer la
comunicación con bases de datos,
se utilizan las conexiones y se representan mediante clases
específicas de proveedor, como SQLConnection. Los
comandos viajan por las conexiones y devuelven conjuntos de
resultados en forma de secuencias que puede leer un objeto
DataReader o que se pueden insertar en un objeto
DataSet.
En el ejemplo siguiente se muestra la forma
de crear un objeto de conexión. Las conexiones se pueden
abrir explícitamente mediante llamadas al método
Open de la conexión; también se pueden abrir
implícitamente al utilizar un objeto
DataAdapter.
Para ver el gráfico seleccione la
opción "Descargar" del menú superior
VB AdoOverview1.aspx
[] | [Ver
código fuente]
Los comandos contienen la información que se
envía a una base de datos y se representan mediante clases
específicas de un proveedor, como SQLCommand. Un
comando podría ser una llamada a un procedimiento
almacenado, una instrucción UPDATE o una
instrucción que devuelve resultados. También es
posible utilizar parámetros de entrada o de resultados y
devolver valores como
parte de la sintaxis del comando. En el ejemplo siguiente se
muestra la
forma de ejecutar una instrucción INSERT en la base de
datos Northwind.
Para ver el gráfico seleccione la
opción "Descargar" del menú superior
VB AdoOverview2.aspx
[Ejecutar
ejemplo] | [Ver
código fuente]
El objeto DataReader es, en cierto modo,
sinónimo de un cursor de sólo lectura y
sólo hacia delante para datos. La API de DataReader
es compatible con datos sin formato y con datos
jerárquicos. Cuando se ejecuta un comando en la base de
datos, se devuelve un objeto DataReader. El formato del
objeto DataReader devuelto es distinto de un conjunto de
registros. Por ejemplo, podría utilizarse el objeto
DataReader para mostrar los resultados de una lista de
búsqueda en una página
Web.
Para ver el gráfico seleccione la
opción "Descargar" del menú superior
VB AdoOverview3.aspx
[Ejecutar
ejemplo] | [Ver
código fuente
Objetos DataSet
El objeto DataSet es similar al objeto Recordset de
ADO, pero más eficaz y con una diferencia importante:
DataSet siempre está desconectado. El objeto
DataSet representa a una memoria
caché de datos, con estructuras
análogas a las de una base de datos, como tablas,
columnas, relaciones y restricciones. Sin embargo, aunque se
puede utilizar un objeto DataSet como una base de datos (y
su comportamiento
es muy similar), es importante recordar que los objetos
DataSet no interactúan directamente con bases de datos ni
con otros datos de origen. Esto permite al programador trabajar
con un modelo de programación que siempre es coherente,
independientemente de dónde resida el origen de datos. En
los objetos DataSet se pueden colocar datos provenientes
de una base de datos, un archivo XML,
código
o información escrita por el usuario. A
continuación, a medida que se realizan cambios en el
objeto DataSet, se puede hacer un seguimiento y una
comprobación de los cambios antes de actualizar los datos
de origen. El método
GetChanges del objeto DataSet crea en realidad otro
objeto DataSet que sólo contiene los cambios
realizados en los datos. Posteriormente, un objeto
DataAdapter u otros objetos, utilizan este objeto
DataSet para actualizar el origen de datos
original.
El objeto DataSet tiene muchas características de XML, incluida la
capacidad de producir y consumir datos XML y esquemas XML. Los
esquemas XML se pueden utilizar para describir esquemas
intercambiables a través de servicios
Web. De hecho,
un objeto DataSet con un esquema puede compilarse con
seguridad de
tipos y finalización automática de
instrucciones.
Objetos DataAdapter (OLEDB/SQL)
El objeto DataAdapter funciona como un puente entre el
objeto DataSet y los datos de origen. El uso del objeto
SqlDataAdapter específico del proveedor (junto con
los objetos SqlCommand y SqlConnection asociados)
permite aumentar el rendimiento global al trabajar con bases de
datos de Microsoft SQL
Server. Para otras bases de datos compatibles con OLE DB, se debe
utilizar el objeto OleDbDataAdapter y los objetos
OleDbCommand y OleDbConnection
asociados.
El objeto DataAdapter utiliza comandos para
actualizar el origen de datos después de hacer
modificaciones en el objeto DataSet. Si se utiliza el
método Fill del objetoDataAdapter, se llama
al comando SELECT; si se utiliza el método Update
se llama al comando INSERT, UPDATE o DELETE para cada fila
modificada. Es posible establecer explícitamente estos
comandos con el fin de controlar las instrucciones que se
utilizan en tiempo de
ejecución para resolver cambios, incluido el uso de
procedimientos
almacenados. En escenarios ad-hoc, un objeto
CommandBuilder puede generarlos en tiempo de
ejecución a partir de una instrucción de selección.
Sin embargo, para generar en tiempo de ejecución hay que
hacer un viaje de ida y vuelta adicional al servidor con el
fin de recopilar los metadatos necesarios; por tanto, si se
proporcionan explícitamente los comandos INSERT, UPDATE y
DELETE en tiempo de diseño,
el rendimiento en tiempo de ejecución
mejorará.
SqlConnection SqlDataAdapter mySqlDataAdapter.InsertCommand.CommandText = mySqlDataAdapter.InsertCommand.CommandType = mySqlDataAdapter.DeleteCommand.CommandText = mySqlDataAdapter.DeleteCommand.CommandType = mySqlDataAdapter.UpdateCommand.CommandText = mySqlDataAdapter.UpdateCommand.CommandType = Dim myConnection As Dim mySqlDataAdapter.InsertCommand.CommandText = mySqlDataAdapter.InsertCommand.CommandType = mySqlDataAdapter.DeleteCommand.CommandText = mySqlDataAdapter.DeleteCommand.CommandType = mySqlDataAdapter.UpdateCommand.CommandText = mySqlDataAdapter.UpdateCommand.CommandType = | ||
C# | VB |
mySqlDataAdapter.Update(myDataSet); mySqlDataAdapter.Update(myDataSet) | ||
C# | VB |
Los registros se asignan a los comandos correspondientes
de la forma apropiada.
Para ver el gráfico seleccione la
opción "Descargar" del menú superior
Figura: Objetos DataAdapter y
DataSet
En el ejemplo siguiente se ilustra la carga de un objeto
DataAdapter a través de una instrucción
SELECT. A continuación, se actualizan, eliminan y agregan
algunos registros en el objeto DataSet. Por último,
se devuelven las actualizaciones a la base de datos de origen a
través del objeto DataAdapter. En la página,
se muestran los comandos DeleteCommand, InsertCommand y
UpdateCommand creados. También se ilustra el uso de varios
objetos DataAdapter para cargar varias tablas (Customers y
Orders) en el objeto DataSet.
Para ver el gráfico seleccione la
opción "Descargar" del menú superior
VB AdoOverview4.aspx
[Ejecutar
ejemplo] | [Ver
código fuente]
- La tecnología ADO.NET, integrada en .Net
Framework, es el siguiente estado de
evolución de ADO. - Se diseñó teniendo en cuenta los
modelos
multinivel, la independencia y el estándar XML. Para
estos escenarios se proporcionan dos objetos nuevos,
DataSet y DataAdapter. - Se puede utilizar ADO.NET para obtener datos de una
secuencia o para almacenar datos en una memoria
caché a fin de realizar actualizaciones. - La documentación contiene mucha más
información acerca de ADO.NET. - Hay que tener en cuenta que se puede ejecutar un
comando directamente en la base de datos para realizar
inserciones, actualizaciones y eliminaciones. Para insertar,
actualizar o eliminar datos no hay que colocarlos primero en un
objeto DataSet. - Además, se puede utilizar un objeto
DataSet para enlazar con los datos, examinarlos y
explorar sus relaciones.
Miguel Tito