OleDbDataAdapter.Fill Método

Definición

Agrega o actualiza las filas de DataSet para que coincidan con las de un objeto o Record ADORecordset.

Sobrecargas

Nombre Description
Fill(DataTable, Object)

Agrega o actualiza las filas de para DataTable que coincidan con las de un objeto o Recordset ADO Record mediante los objetos especificados DataTable y ADO.

Fill(DataSet, Object, String)

Agrega o actualiza las filas de DataSet para que coincidan con las de un objeto o Recordset ADO Record mediante el objeto , el objeto ADO y el nombre de la tabla de origen especificadosDataSet.

Fill(DataTable, Object)

Agrega o actualiza las filas de para DataTable que coincidan con las de un objeto o Recordset ADO Record mediante los objetos especificados DataTable y ADO.

public:
 int Fill(System::Data::DataTable ^ dataTable, System::Object ^ ADODBRecordSet);
public int Fill(System.Data.DataTable dataTable, object ADODBRecordSet);
override this.Fill : System.Data.DataTable * obj -> int
Public Function Fill (dataTable As DataTable, ADODBRecordSet As Object) As Integer

Parámetros

dataTable
DataTable

que DataTable se va a rellenar con registros y, si es necesario, esquema.

ADODBRecordSet
Object

Un objeto o Record ADORecordset.

Devoluciones

Número de filas actualizadas correctamente a .DataTable Esto no incluye filas afectadas por instrucciones que no devuelven filas.

Comentarios

El vínculo entre Objetos de datos ActiveX (ADO) y ADO.NET es una operación unidireccional en la que puede copiar datos de ADO a la DataSet, pero las actualizaciones de los datos deben controlarse mediante ADO.NET.

Esta sobrecarga del Fill método no cierra la entrada Recordset al finalizar la Fill operación.

Al controlar instrucciones SQL por lotes que devuelven varios resultados, esta implementación de Fill y FillSchema para OLE DB.NET Framework Proveedor de datos recupera información de esquema solo para el primer resultado.

La Fill operación agrega las filas al objeto de destino DataTable especificado en DataSet, creando el DataTable objeto si aún no existe. Al crear un DataTable objeto, la Fill operación normalmente crea solo metadatos de nombre de columna. Sin embargo, si la MissingSchemaAction propiedad está establecida AddWithKeyen , también se crean las restricciones y las claves principales adecuadas.

Puede usar el Fill método varias veces en el mismo DataTable. Si existe una clave principal, las filas entrantes se combinan con filas coincidentes que ya existen. Si no existe ninguna clave principal, las filas entrantes se anexan a .DataTable Si la información de clave principal está presente, las filas duplicadas se reconcilian y solo aparecen una vez en que DataTable corresponde a DataSet. La información de clave principal se puede establecer a través FillSchemade , especificando la PrimaryKey propiedad de DataTableo estableciendo la MissingSchemaAction propiedad AddWithKeyen .

Si SelectCommand devuelve los resultados de OUTER JOIN, DataAdapter no establece un valor PrimaryKey para el objeto DataTableresultante. Debe definir explícitamente la clave principal para asegurarse de que las filas duplicadas se resuelven correctamente. Para obtener más información, consulte Definición de claves principales.

Para funcionar correctamente con la Proveedor de datos de .NET Framework para OLE DB, AddWithKey requiere que el proveedor OLE DB nativo obtenga la información de clave principal necesaria estableciendo la propiedad DBPROP_UNIQUEROWS y, a continuación, determina qué columnas son columnas de clave principal examinando DBCOLUMN_KEYCOLUMN en el IColumnsRowset. Como alternativa, el usuario puede establecer explícitamente las restricciones de clave principal en cada DataTable. Esto garantiza que los registros entrantes que coincidan con los registros existentes se actualicen en lugar de anexados.

OleDbDataAdapter Si encuentra columnas duplicadas al rellenar un DataTable, genera nombres para las columnas posteriores, utilizando el patrón "columnname1", "columnname2", "columnname3", etc. Los nombres de columna vacíos se agregan a DataTable, utilizando una cadena vacía para la primera columna, seguida de "1", "2", "3", etc. para las columnas vacías posteriores.

Los valores de ADO Recordset o Record objetos se convierten en tipos de Common Language Runtime para el almacenamiento en DataSet.

Caution

Esta sobrecarga del Fill método no llama Close implícitamente al objeto ADO cuando se completa la operación de relleno. Por lo tanto, llame siempre Close cuando haya terminado de usar ADO Recordset o Record objetos. Esto garantiza que la conexión subyacente a un origen de datos se libere de forma oportuna y también impida posibles infracciones de acceso debido a los objetos de ADO no administrados que se reclaman por la recolección de elementos no utilizados cuando todavía existen referencias existentes.

Cuando se llama al TableMappings.Add método en DataAdapter y se asigna explícitamente el parámetro de tabla de origen a una cadena vacía, el conjunto de datos se rellena correctamente mediante la tabla de origen, pero el conjunto de datos se rellenará sin nada. Por ejemplo, en el ejemplo siguiente, rDataSet se rellenará sin nada.

rAdapter.TableMappings.Add("source table", "");
rAdapter.Fill(rDataSet, "source table");

En este ejemplo se muestra cómo puede omitir un resultado al tratar con varios resultados.

En el ejemplo siguiente se usa un OleDbDataAdapter para rellenar DataTable mediante un objeto ADO Recordset. En este ejemplo se supone que ha creado un ADO Recordset.

Dim custDA As OleDbDataAdapter = New OleDbDataAdapter()
     Dim custDS As DataSet = New DataSet
     Dim custTable As DataTable = New DataTable("Customers")
     custTable.Columns.Add("CustomerID", Type.GetType("System.String"))
     custTable.Columns.Add("CompanyName", Type.GetType("System.String"))
     custDS.Tables.Add(custTable)
     'Use ADO objects from ADO library (msado15.dll) imported
     ' as.NET library ADODB.dll using TlbImp.exe
     Dim adoConn As ADODB.Connection = New ADODB.Connection()
     Dim adoRS As ADODB.Recordset = New ADODB.Recordset()
     adoConn.Open("Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;", "", "", -1)
     adoRS.Open("SELECT CustomerID, CompanyName FROM Customers", adoConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 1)
     custDA.Fill(custTable, adoRS)
     adoRS.Close()
     adoConn.Close()
OleDbDataAdapter custDA = new OleDbDataAdapter();
     DataSet custDS = new DataSet();
     DataTable custTable = new DataTable("Customers");
     custTable.Columns.Add("CustomerID", typeof(String));
     custTable.Columns.Add("CompanyName", typeof(String));
     custDS.Tables.Add(custTable);
     //Use ADO objects from ADO library (msado15.dll) imported
     //  as.NET library ADODB.dll using TlbImp.exe
     ADODB.Connection adoConn = new ADODB.Connection();
     ADODB.Recordset adoRS = new ADODB.Recordset();
     adoConn.Open("Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;", "", "", -1);
     adoRS.Open("SELECT CustomerID, CompanyName FROM Customers", adoConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 1);
     custDA.Fill(custTable, adoRS);
     adoRS.Close();
     adoConn.Close();

Consulte también

Se aplica a

Fill(DataSet, Object, String)

Agrega o actualiza las filas de DataSet para que coincidan con las de un objeto o Recordset ADO Record mediante el objeto , el objeto ADO y el nombre de la tabla de origen especificadosDataSet.

public:
 int Fill(System::Data::DataSet ^ dataSet, System::Object ^ ADODBRecordSet, System::String ^ srcTable);
public int Fill(System.Data.DataSet dataSet, object ADODBRecordSet, string srcTable);
override this.Fill : System.Data.DataSet * obj * string -> int
Public Function Fill (dataSet As DataSet, ADODBRecordSet As Object, srcTable As String) As Integer

Parámetros

dataSet
DataSet

que DataSet se va a rellenar con registros y, si es necesario, esquema.

ADODBRecordSet
Object

Un objeto o Record ADORecordset.

srcTable
String

Tabla de origen usada para las asignaciones de tablas.

Devoluciones

Número de filas agregadas o actualizadas correctamente en .DataSet Esto no incluye filas afectadas por instrucciones que no devuelven filas.

Excepciones

La tabla de origen no es válida.

Comentarios

El vínculo entre Objetos de datos ActiveX (ADO) y ADO.NET es una operación unidireccional en la que puede copiar datos de ADO a la DataSet, pero las actualizaciones de los datos deben controlarse mediante ADO.NET.

El Fill método recorre en iteración varios resultados llamando al NextRecordset método en , Recordsetcerrando la entrada Recordset al finalizar la Fill operación.

La Fill operación agrega las filas al objeto de destino DataTable especificado en DataSet, creando el DataTable objeto si aún no existe. Al crear un DataTable objeto, la Fill operación normalmente crea solo metadatos de nombre de columna. Sin embargo, si la MissingSchemaAction propiedad está establecida AddWithKeyen , también se crean las restricciones y las claves principales adecuadas.

Si la información de clave principal está presente, las filas duplicadas se reconcilian y solo aparecen una vez en que DataTable corresponde a DataSet. La información de clave principal se puede establecer a través FillSchemade , especificando la PrimaryKey propiedad de DataTableo estableciendo la MissingSchemaAction propiedad AddWithKeyen .

Para funcionar correctamente con la Proveedor de datos de .NET Framework para OLE DB, AddWithKey requiere que el proveedor OLE DB nativo obtenga la información de clave principal necesaria estableciendo la propiedad DBPROP_UNIQUEROWS y, a continuación, determine qué columnas son columnas de clave principal examinando DBCOLUMN_KEYCOLUMN en el IColumnsRowset. Como alternativa, el usuario puede establecer explícitamente las restricciones de clave principal en cada DataTable. Esto garantiza que los registros entrantes que coincidan con los registros existentes se actualicen en lugar de anexados.

Si SelectCommand devuelve los resultados de OUTER JOIN, DataAdapter no establece un valor PrimaryKey para el objeto DataTableresultante. Debe definir explícitamente la clave principal para asegurarse de que las filas duplicadas se resuelven correctamente. Para obtener más información, consulte Definición de claves principales.

Recordset Si se cierra antes del inicio de la Fill operación, no se produce ningún error. Esto es necesario para controlar varios resultados, ya que las consultas que no devuelven filas se indican mediante un objeto cerrado Recordset. Solo OleDbDataAdapter llama NextRecordset a en el cerrado Recordset y continúa procesando.

Si se produce un error al rellenar el conjunto de datos, las filas agregadas antes de que se produzca el error permanecen en .DataSet Se anula el resto de la operación.

Si el DbDataAdapter objeto encuentra columnas duplicadas mientras rellena un DataTable, genera nombres para las columnas posteriores, utilizando el patrón "columnname1", "columnname2", "columnname3", etc. Si los datos entrantes contienen columnas sin nombre, se colocan en según DataSet el patrón "Column1", "Column2", etc. Cuando se agregan varios conjuntos de resultados al DataSet conjunto de resultados, cada conjunto de resultados se coloca en una tabla independiente. Los conjuntos de resultados adicionales se denominan anexando valores enteros al nombre de tabla especificado (por ejemplo, "Table", "Table1", "Table2", etc.). Las aplicaciones que usan nombres de columna y tabla deben asegurarse de que no se produzcan conflictos con estos patrones de nomenclatura.

Los valores de ADO Recordset o Record objetos se convierten en tipos de Common Language Runtime para el almacenamiento en DataSet.

Note

Esta sobrecarga del Fill método llama Close implícitamente al objeto ADO cuando se completa la operación de relleno.

En el ejemplo siguiente se usa un OleDbDataAdapter para rellenar mediante un DataSet objeto ADO Recordset que es un objeto ADO Record . En este ejemplo se supone que ha creado un ADO RecordSet y Record un objeto .

Dim custDA As OleDbDataAdapter = New OleDbDataAdapter()
     Dim custDS As DataSet = New DataSet
     'Use ADO objects from ADO library (msado15.dll) imported
     ' as.NET library ADODB.dll using TlbImp.exe
     Dim adoConn As ADODB.Connection = New ADODB.Connection()
     Dim adoRS As ADODB.Recordset = New ADODB.Recordset()
     adoConn.Open("Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;", "", "", -1)
     adoRS.Open("SELECT * FROM Customers", adoConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 1)
     custDA.Fill(custDS, adoRS, "Customers")
     adoConn.Close()
OleDbDataAdapter custDA = new OleDbDataAdapter();
     DataSet custDS = new DataSet();
     //Use ADO objects from ADO library (msado15.dll) imported
     // as.NET library ADODB.dll using TlbImp.exe
     ADODB.Connection adoConn = new ADODB.Connection();
     ADODB.Recordset adoRS = new ADODB.Recordset();
     adoConn.Open("Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;", "", "", -1);
     adoRS.Open("SELECT * FROM Customers", adoConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, 1);
     custDA.Fill(custDS, adoRS, "Customers");
     adoConn.Close();

Consulte también

Se aplica a