Compartir a través de


Introducción a los adaptadores de datos

Actualización: noviembre 2007

Los adaptadores de datos son una parte integral de los proveedores administrados por ADO.NET, que son el conjunto de objetos que se utilizan para la comunicación entre un origen de datos y un conjunto de datos. (Además de los adaptadores, entre los proveedores administrados se incluyen los objetos de conexión, los objetos lectores de datos y los objetos de comando). Los adaptadores se utilizan para intercambiar datos entre un origen de datos y un conjunto de datos. En muchas aplicaciones, esto significa leer datos de una base de datos para un conjunto de datos y, a continuación, volver escribir a escribir en la base de datos los datos modificados del conjunto de datos. Sin embargo, un adaptador de datos puede trasladar datos entre cualquier origen y un conjunto de datos. Por ejemplo, podría haber un adaptador que trasladara datos entre un servidor Microsoft Exchange y un conjunto de datos.

Nota:

En la versión anterior de Visual Studio, los adaptadores de datos se utilizaban para la comunicación de la aplicación con una base de datos. Mientras que los adaptadores de datos aún son un componente principal de .Proveedores de datos de .NET Framework (ADO.NET), los objetos TableAdapters son componentes generados por diseñador que simplifican el proceso de mover datos entre la aplicación y la base de datos. Para obtener más información sobre cómo trabajar con objetos TableAdapters, vea Información general sobre TableAdapter.

Generalmente, los adaptadores pueden configurarse para permitir que se especifique qué datos deben trasladarse al conjunto de datos y fuera del mismo. A menudo, esto adopta la forma de referencias a instrucciones SQL o procedimientos almacenados, que se invocan para leer o escribir en una base de datos.

Visual Studio proporciona estos dos adaptadores de datos para utilizarlos con bases de datos:

  • El objeto OleDbDataAdapter resulta adecuado para utilizarlo con cualquier origen de datos expuesto por un proveedor OLE DB.

  • El objeto SqlDataAdapter es específico de SQL Server. Dado que no tiene que pasar por una capa OLE DB, resulta más rápido que la clase OleDbDataAdapter. Sin embargo, sólo puede utilizarse con SQL Server 7.0 o posterior.

  • El objeto OdbcDataAdapter está optimizado para obtener acceso a los orígenes de datos ODBC.

  • El objeto OracleDataAdapter está optimizado para obtener acceso a las bases de datos de Oracle.

    Nota:

    Los adaptadores de datos, las conexiones de datos, los comandos de datos y los lectores de datos son los componentes que constituyen un proveedor de datos de .NET Framework. Microsoft y otros fabricantes pueden proporcionar otros proveedores de datos de .NET Framework que se pueden integrar en Visual Studio. Para obtener más información sobre los diferentes proveedores de datos de .NET Framework, vea .Proveedores de datos de .NET Framework (ADO.NET).

Puede crear y manipular adaptadores por medio de las siguientes partes de los espacios de nombres de proveedores administrados de .NET Framework.

Espacio de nombres de proveedor administrado SqlClient
Espacio de nombres de proveedor administrado OleDb

Generalmente, cada adaptador de datos intercambia datos entre una sola tabla de orígenes 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.

Cuando desee llenar una tabla de un conjunto de datos, llame a un método adaptador que ejecute una instrucción SQL o un procedimiento almacenado. El adaptador crea un objeto lector de datos (SqlDataReader, OleDbDataReader, OdbcDataReader o OracleDataReader) para leer los datos en un conjunto de datos.

Nota:

Puede leer datos de la base de datos sin tener que almacenarlos en un conjunto de datos, lo que resulta muy eficaz en situaciones en las que estén implicados datos de sólo lectura. Para obtener más información, vea la sección "Datos de sólo lectura" más adelante. También puede ejecutar instrucciones SQL directamente, sin utilizarlas para llenar un conjunto de datos. Para obtener más información, vea Comandos y parámetros (ADO.NET).

De forma similar, cuando desee actualizar la base de datos, 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.

Adaptadores de datos y tablas relacionadas

Una de las implicaciones de tener tablas separadas en el conjunto de datos es que un adaptador de datos no suele hacer referencia a comandos SQL ni procedimientos almacenados que combinen tablas. Por el contrario, la información de las tablas relacionadas se lee por separado en el conjunto de datos mediante adaptadores diferentes. A continuación, se utiliza un objeto DataRelation para administrar las restricciones entre las tablas del conjunto de datos (como, por ejemplo, las actualizaciones en cascada) y para permitir la navegación entre registros maestros y secundarios relacionados.

Por ejemplo, imagine que está trabajando con dos tablas relacionadas en la base de datos Northwind, Customers y Orders. En lugar de especificar una combinación de ambas tablas en un solo conjunto de resultados, lo más normal sería definir dos adaptadores, uno para llenar una tabla Customers del conjunto de datos y un segundo adaptador para leer los registros de Order de una tabla diferente del conjunto de datos. Probablemente, los adaptadores individuales incluirán criterios de selección para limitar el número de registros de las tablas de datos.

En el conjunto de datos, también definiría un objeto DataRelation que especificara que los registros de pedidos están relacionados con los registros de clientes mediante el campo CustomerID. Puede continuar administrando las tablas individualmente, lo que no sería posible si hubiera combinado las tablas antes de extraer registros del origen de datos. Cuando desee trabajar con registros relacionados, puede invocar las propiedades y los métodos del objeto DataRelation.

Para obtener más información sobre las relaciones de datos, vea Relaciones en conjuntos de datos.

Objetos Connection

Un adaptador de datos necesita una conexión abierta con un origen de datos para leer y escribir datos. Por ello, un adaptador utiliza objetos de conexión (SqlConnection, OleDbConnection, OdbcConnection o OracleConnection) 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.

En la tabla siguiente se recogen los objetos de conexión de la ficha Datos del Cuadro de herramientas:

Objetos Connection

Descripción

SqlConnection

Conexión con una base de datos de SQL Server 7.0 o posterior.

OleDbConnection

Conexión con un origen de datos OLE DB.

OdbcConnection

Conexión con un origen de datos ODBC.

OracleConnection

Conexión con una base de datos de Oracle.

En todos los casos, 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 revertir transacciones de base de datos. Para obtener más información sobre los objetos de conexión, vea Conectar con un origen de datos (ADO.NET).

Nota de seguridad:

El almacenamiento de información confidencial (como el nombre de servidor, el nombre de usuario y la contraseña) puede afectar a la seguridad de la aplicación. El uso de la Autenticación de Windows (también conocida como seguridad integrada) es un modo más seguro de controlar el acceso a una base de datos.

Objetos Command de ADO.NET

Mediante un adaptador, puede leer, agregar, actualizar y eliminar registros de un origen de datos. Para permitir que se especifique cómo debe realizarse cada una de estas operaciones, los adaptadores admiten las siguientes cuatro propiedades:

  • 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.

  • DeleteCommand: referencia a un comando para eliminar filas del almacén de datos.

Las propiedades en sí son objetos: son instancias de la clase SqlCommand, OleDbCommand, OdbcCommand o OracleCommand. Los objetos admiten una propiedad CommandText que contiene una referencia a una instrucción SQL o a un procedimiento almacenado.

Nota:

La clase del comando debe coincidir con la clase de la conexión. Por ejemplo, si está utilizando un objeto SqlConnection para comunicarse con un SQL Server, deberá utilizar comandos que se deriven de la clase SqlCommand.

Aunque puede establecer explícitamente el texto de un objeto de conexión, no siempre necesitará hacerlo así; en muchas situaciones, Visual Studio generará las instrucciones SQL necesarias. Además, el adaptador puede generar automáticamente las instrucciones SQL apropiadas en tiempo de ejecución si no se especifican los objetos UpdateCommand, InsertCommand o DeleteCommand. Para obtener más información, vea Generar comandos con objetos CommandBuilder (ADO.NET).

Sin embargo, es posible manipular objetos de comando en tiempo de diseño y en tiempo de ejecución para tener un control más directo sobre la ejecución de los comandos. Por ejemplo, puede crear o modificar el comando asociado a un objeto SelectCommand inmediatamente antes de su ejecución.

También puede ejecutar comandos personalmente, independientemente del adaptador de datos. Esto permite pasar comandos SQL arbitrarios a través del adaptador de datos, como los que se utilizan para definir o modificar las definiciones de la base de datos. También puede llamar directamente a procedimientos almacenados que no devuelvan conjuntos de registros como, por ejemplo, un procedimiento almacenado que valide una entrada de un usuario frente una base de datos. Para obtener más información, vea Ejecutar un comando (ADO.NET).

Nota de seguridad:

Cuando utilice comandos de datos con una propiedad CommandType cuyo valor esté establecido en Text, compruebe minuciosamente la información enviada desde el cliente antes de pasarla a la base de datos. Usuarios con malas intenciones podrían intentar enviar (insertar) instrucciones de SQL modificadas o adicionales con el fin de obtener acceso no autorizado o dañar la base de datos. Antes de transferir la entrada del usuario a una base de datos, debe comprobar siempre que la información es válida; un procedimiento recomendado es utilizar siempre que sea posible consultas parametrizadas o procedimientos almacenados. Para obtener más información, vea Información general sobre los ataques mediante secuencias de comandos.

Parámetros de comandos

Los comandos de un adaptador de datos suelen estar dirigidos por parámetros. Por ejemplo, el comando para la propiedad SelectCommand suele tener un parámetro en su cláusula WHERE para que se puedan especificar en tiempo de ejecución los registros que se van a obtener de la base de datos. Los otros comandos utilizan parámetros que permiten pasar, en tiempo de ejecución, los datos que se van escribir en un registro y qué registro de la base de datos se va a actualizar. Para obtener más información sobre cómo se utilizan los parámetros en adaptadores de datos, vea Parámetros de los comandos de adaptadores de datos.

Leer y actualizar con adaptadores de datos

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.

Nota:

Si sólo desea leer datos (sin actualizarlos), no es necesario que los almacene en un conjunto de datos. En lugar de hacerlo así, puede leerlos directamente de la base de datos en una aplicación. Para obtener más información, vea la sección "Datos de sólo lectura" más adelante.

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, utilice el método Fill en un objeto adaptador de datos (SqlDataAdapter, OleDbDataAdapter, OdbcDataAdapter o OracleDataAdapter). 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, utilice el método Update del adaptador. Cuando 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.

    Para obtener más información sobre cómo se realizan las actualizaciones utilizando adaptadores de datos, vea Actualizar orígenes de datos con DataAdapters (ADO.NET).

Datos de sólo lectura

Si el programa necesita ejecutar un pase secuencial, de sólo lectura, a través de los resultados de una consulta, puede utilizar un objeto lector de datos en lugar de llenar un conjunto de datos. Un objeto lector de datos recoge los datos del origen de datos y los pasa directamente a la aplicación. Habitualmente, los objetos lectores de datos se utilizan para tener acceso a los datos de sólo lectura, sólo hacia delante, en aquellas ocasiones en que no sea necesario almacenar en memoria caché los datos en un conjunto de datos. (El propio adaptador de datos utiliza un objeto lector de datos para llenar un conjunto de datos). Un ejemplo es una página de formularios Web Forms que muestra información de una base de datos; dado que la página de formularios Web Forms se crea de nuevo con cada viaje de ida y vuelta, a menudo no resulta útil almacenar los datos en un conjunto de datos.

Visual Studio proporciona cuatro objetos lectores de datos: SqlDataReader, OleDbDataReader, OdbcDataReader y OracleDataReader. Para obtener más información sobre la utilización del objeto lector de datos para un acceso eficaz de sólo lectura, vea DataAdapters y DataReaders (ADO.NET).

Asignaciones de tablas

De forma predeterminada, cuando se utilizan las herramientas de Visual Studio para generar un conjunto de datos a partir de tablas de una base de datos, los nombres de las tablas y de las columnas son los mismos en el conjunto de datos y en la base de datos. Sin embargo, es posible que encuentre esto poco práctico. Por ejemplo, los nombres utilizados en la base de datos podrían ser demasiado breves o demasiado largos, o estar escritos en un idioma extranjero. Si está trabajando con un esquema existente, quizá encuentre también que los nombres definidos en el esquema no coinciden con los utilizados en la base de datos.

En consecuencia, los nombres de la base de datos y del conjunto de datos no tienen por qué coincidir. En su lugar, puede 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). Para obtener más información sobre asignaciones de tabla, vea Asignaciones de tablas en adaptadores de datos.

Vea también

Tareas

Cómo: Configurar parámetros para adaptadores de datos

Cómo: Asignar columnas de orígenes de datos a columnas de tablas de datos del conjunto de datos

Conceptos

Rellenar un objeto DataSet desde un objeto DataAdapter (ADO.NET)

Lo nuevo en datos

Crear aplicaciones de datos utilizando Visual Studio

Otros recursos

DataAdapters y DataReaders (ADO.NET)

Crear adaptadores de datos

Tutoriales sobre datos

ADO.NET