OleDbDataAdapter.Fill Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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 |
Fill(DataSet, Object, String) |
Agrega filas de DataSet o las actualiza para que coincidan con las de un objeto |
Fill(DataTable, Object)
- Source:
- OleDbDataAdapter.cs
- Source:
- OleDbDataAdapter.cs
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 AddWithKey
en , 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 AddWithKey
en .
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
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
- 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 AddWithKey
en , 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 AddWithKey
en .
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();