Compartir a través de


OleDbDataAdapter.Fill Método

Definición

Agrega filas a DataSet o las actualiza para que coincidan con las de un objeto Recordset o Record ADO.

Sobrecargas

Fill(DataTable, Object)

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

Fill(DataSet, Object, String)

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

Fill(DataTable, Object)

Source:
OleDbDataAdapter.cs
Source:
OleDbDataAdapter.cs

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

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

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

ADODBRecordSet
Object

Objeto Recordset o Record de ADO.

Devoluciones

Número de filas actualizadas correctamente en DataTable. No se incluyen las 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 DataSet, pero las actualizaciones de los datos deben ser controladas por 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 y FillSchema para el proveedor de Fill datos OLE DB.NET Framework 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 se establece 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 más información, consulte Definir claves principales.

Para funcionar correctamente con el 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 .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, mediante 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.

Precaución

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 impide posibles infracciones de acceso debido a los objetos de ADO no administrados que se reclaman por la recolección de elementos no utilizados cuando las referencias existentes siguen existiendo.

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 se puede omitir un resultado al tratar con varios resultados.

En el ejemplo siguiente se usa un OleDbDataAdapter objeto para rellenar mediante DataTable un 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)

Source:
OleDbDataAdapter.cs
Source:
OleDbDataAdapter.cs

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

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

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

ADODBRecordSet
Object

Objeto Recordset o Record de ADO.

srcTable
String

Tabla de origen utilizada para las asignaciones de tabla.

Devoluciones

Número de filas agregadas o actualizadas correctamente en la clase DataSet. No se incluyen las 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 DataSet, pero las actualizaciones de los datos deben ser controladas por ADO.NET.

El Fill método recorre en iteración varios resultados llamando al NextRecordset método en Recordset, cerrando 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 se establece 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 el 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 IColumnsRowset. Como alternativa, el usuario puede establecer explícitamente las restricciones de clave principal en cada DataTable. De este modo se garantiza que los registros entrantes que coincidan con los ya existentes se actualicen en lugar de agregarse.

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 más información, consulte Definir 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 a NextRecordset 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 una 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 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.

Nota

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 objeto para rellenar DataSet mediante un 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