Compartir a través de


Rellenar DataSet con un conjunto de registros o registro de ADO

Para proporcionar acceso desde ADO.NET a objetos Recordset y Record de ADO, el proveedor de datos de .NET Framework para OLE DB sobrecarga el método Fill de OleDbDataAdapter para aceptar un objeto Recordset o Record de ADO. La operación de rellenar un objeto DataSet con el contenido de un objeto de ADO es unidireccional. Es decir, es posible importar datos desde el objeto Recordset o Record de ADO en DataSet, pero cualquier actualización relacionada con los datos debe controlarse de forma explícita. Sin embargo, una vez llenado un objeto DataSet con datos procedentes de un objeto de ADO, es posible resolver los cambios en el origen de datos mediante un objeto DataAdapter y también es posible escribir datos como código XML.

La operación Fill anexa filas a los objetos DataTable existentes del objeto DataSet si no hay información disponible sobre la clave principal. Si se dispone de información sobre la clave principal para DataTable, la operación Fill actualiza las filas que tengan claves principales coincidentes. Para obtener más información sobre cómo recuperar información de la clave principal desde un origen de datos, vea Agregar restricciones existentes a DataSet. Como alternativa, la información de clave principal se puede establecer mediante programación tal y como se describe en Definir una clave principal para una tabla.

Para utilizar un componente del Modelo de objetos componentes (COM) que devuelve un objeto Recordset o Record de ADO mediante servicios de interoperabilidad COM de .NET y ADO.NET, primero hay que importar la información de la biblioteca de tipos para el componente COM y la de ADO mediante la herramienta Importador de la biblioteca de tipos (Tlbimp.exe). Para obtener más información acerca del acceso a objetos COM desde .NET Framework, vea Exponer componentes COM en .NET Framework.

**Nota   **Visual Studio.NET proporciona un ensamblado de interoperabilidad primaria (PIA) para ADO en el directorio "Archivos de programa\Microsoft.NET\Primary Interop Assemblies" en el archivo adodb.dll. Si tiene instalada una copia de Visual Studio.NET, se recomienda que utilice este archivo (adodb.dll) en lugar de importar el suyo propio utilizando la herramienta Importador de la biblioteca de tipos (tlbimp.exe). Para obtener más información acerca de los ensamblados de interoperabilidad primaria, vea Ensamblados de interoperabilidad primaria.

Por ejemplo, un componente COM existente cuyo identificador de programa sea ADOComponent.DataClass se compila en ADOComponent.dll. Tiene métodos que devuelven objetos de tipo ADODB.Recordset. Para utilizar este objeto desde .NET, que contiene los objetos ADODB.Recordset y ADODB.Record, hay que importar ADOComponent.dll y msado15.dll. Para importar las bibliotecas de tipos COM en .NET, hay que utilizar los siguientes comandos.

TlbImp "C:\Program Files\Common Files\System\Ado\msado15.dll" /out:ADODB.dll
TlbImp ADOComponent.dll /out:ADOCOM.dll

Es posible pasar entonces las bibliotecas de .NET resultantes, ADODB.dll y ADOCOM.dll, como referencias de bibliotecas al compilar un programa de .NET. En el código siguiente se muestra cómo compilar un programa de Visual Basic .NET con vbc.exe y cómo suministrar las bibliotecas COM importadas.

vbc MyVB.vb /r:system.dll /r:system.data.dll /r:system.xml.dll /r:ADODB.dll /r:ADOCOM.dll

En el código siguiente se muestra cómo compilar un programa de C# con csc.exe y cómo suministrar las bibliotecas COM importadas.

csc MyCS.cs /r:system.dll /r:system.data.dll /r:system.xml.dll /r:ADODB.dll /r:ADOCOM.dll

En el ejemplo siguiente se muestra el código que podría escribirse en .NET si el objeto ADOComponent.DataClass tuviera un método denominado GetData que devolviera un ADODB.Recordset.

Dim adoComponent As ADOCOM.DataClass = New ADOCOM.DataClass
Dim adoRS As ADODB._Recordset = adoComponent.GetData()
[C#]
ADOCOM.DataClass adoComponent = new ADOCOM.DataClass();
ADODB._Recordset adoRS = adoComponent.GetData();

En el siguiente ejemplo de código se muestra cómo puede utilizarse el objeto ADODB.Recordset para rellenar (con Fill) un DataSet.

Dim myDA As OleDbDataAdapter = New OleDbDataAdapter
Dim myDS As DataSet = New DataSet

myDA.Fill(myDS, adoRS, "MyTable")
[C#]
OleDbDataAdapter myDA = new OleDbDataAdapter();
DataSet myDS = New DataSet();

myDA.Fill(myDS, adoRS, "MyTable");

**PRECAUCIÓN  ** ****Al utilizar objetos Recordset o Record de ADO junto con aplicaciones de .NET Framework, siempre hay que llamar a Close cuando se haya terminado. Esto garantiza que la conexión subyacente a un origen de datos se libere a tiempo, a la vez que impide posibles infracciones de acceso debidas a que la recolección de elementos no utilizados reclama objetos ADO no administrados cuando sigue habiendo referencias existentes.

Hay que tener en cuenta que la sobrecarga de OleDbDataAdapter.Fill que toma un DataSet y un objeto de ADO llama implícitamente a Close en el objeto de ADO cuando se completa la operación Fill. Es necesario cerrar explícitamente el objeto Recordset o Record de ADO después de realizar una llamada a la sobrecarga de OleDbDataAdapter.Fill que toma una tabla DataTable.

Vea también

Acceso a un conjunto de registros o a un registro de ADO desde ADO.NET | Importador de la biblioteca de tipos (Tlbimp.exe) | Exponer componentes COM en .NET Framework