OleDbDataAdapter.Fill Methode

Definitie

Hiermee worden rijen in de DataSet rijen toegevoegd of vernieuwd die overeenkomen met die in een ADO Recordset of Record object.

Overloads

Name Description
Fill(DataTable, Object)

Hiermee worden rijen in een rij DataTable toegevoegd of vernieuwd die overeenkomen met die in een ADO Recordset of Record object met behulp van de opgegeven DataTable en ADO-objecten.

Fill(DataSet, Object, String)

Hiermee worden rijen in de DataSet rijen toegevoegd of vernieuwd die overeenkomen met die in een ADO Recordset of Record object met behulp van het opgegeven DataSet, ADO-object en de naam van de brontabel.

Fill(DataTable, Object)

Hiermee worden rijen in een rij DataTable toegevoegd of vernieuwd die overeenkomen met die in een ADO Recordset of Record object met behulp van de opgegeven DataTable en ADO-objecten.

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

Parameters

dataTable
DataTable

A DataTable voor het doorvoeren van records en, indien nodig, schema.

ADODBRecordSet
Object

Een ADO Recordset of Record object.

Retouren

Het aantal rijen dat is vernieuwd naar de DataTable. Dit omvat geen rijen die worden beïnvloed door instructies die geen rijen retourneren.

Opmerkingen

De koppeling tussen ActiveX Data Objects (ADO) en ADO.NET is een bewerking in één richting waarin u gegevens van ADO naar de DataSet kunt kopiëren, maar eventuele updates van de gegevens moeten worden verwerkt door ADO.NET.

Deze overbelasting van de Fill methode sluit de invoer Recordset niet bij voltooiing van de Fill bewerking.

Bij het verwerken van batch-SQL-instructies die meerdere resultaten retourneren, haalt deze implementatie van Fill en FillSchema voor het OLE DB.NET Framework Data Provider alleen schemagegevens op voor het eerste resultaat.

Met Fill de bewerking worden de rijen toegevoegd aan het opgegeven doelobject DataTable in het DataSetobject, waardoor het DataTable object wordt gemaakt als het nog niet bestaat. Wanneer u een DataTable object maakt, worden met de Fill bewerking gewoonlijk alleen metagegevens van de kolomnaam gemaakt. Als de MissingSchemaAction eigenschap echter is ingesteld op AddWithKey, worden ook de juiste primaire sleutels en beperkingen gemaakt.

U kunt de Fill methode meerdere keren op dezelfde DataTablemethode gebruiken. Als er een primaire sleutel bestaat, worden binnenkomende rijen samengevoegd met overeenkomende rijen die al bestaan. Als er geen primaire sleutel bestaat, worden binnenkomende rijen toegevoegd aan de DataTable. Als de primaire-sleutelgegevens aanwezig zijn, worden dubbele rijen op elkaar afgestemd en worden ze slechts één keer weergegeven in de DataTable weergave die overeenkomt met de DataSet. De primaire-sleutelgegevens kunnen worden ingesteld via FillSchema, door de PrimaryKey eigenschap van de DataTableeigenschap op te geven of door de MissingSchemaAction eigenschap in te stellen op AddWithKey.

Als de SelectCommand de resultaten van een OUTER JOIN retourneert, stelt de DataAdapter geen PrimaryKey-waarde in voor het resulterende DataTable. U moet expliciet de primaire sleutel definiëren om ervoor te zorgen dat dubbele rijen correct worden omgezet. Zie Primaire sleutels definiëren voor meer informatie.

Als u correct wilt functioneren met de .NET Framework-Data Provider voor OLE DB, vereist AddWithKey dat de systeemeigen OLE DB-provider vereiste primaire-sleutelgegevens verkrijgt door de eigenschap DBPROP_UNIQUEROWS in te stellen en vervolgens bepaalt welke kolommen primaire-sleutelkolommen zijn door DBCOLUMN_KEYCOLUMN in de IColumnsRowset te controleren. De gebruiker kan ook expliciet de primaire-sleutelbeperkingen voor elke DataTablesleutel instellen. Dit zorgt ervoor dat binnenkomende records die overeenkomen met bestaande records worden bijgewerkt in plaats van toegevoegd.

Als er OleDbDataAdapter dubbele kolommen optreden tijdens het vullen van een DataTablekolom, worden er namen gegenereerd voor de volgende kolommen, met behulp van het patroon 'columnname1', 'columnname2', 'columnname3', enzovoort. Lege kolomnamen worden toegevoegd aan de DataTablekolom, met behulp van een lege tekenreeks voor de eerste kolom, gevolgd door '1', '2', '3', enzovoort voor de volgende lege kolommen.

Waarden in ADO Recordset of Record objecten worden geconverteerd naar algemene typen taalruntime voor opslag in de DataSet.

Waarschuwing

Deze overbelasting van de Fill methode roept Close het ADO-object niet impliciet aan wanneer de vulbewerking is voltooid. Roep daarom altijd aan Close wanneer u klaar bent met het gebruik van ADO Recordset of Record objecten. Dit zorgt ervoor dat de onderliggende verbinding met een gegevensbron tijdig wordt vrijgegeven, en voorkomt ook mogelijke toegangsschendingen vanwege onbeheerde ADO-objecten die worden vrijgemaakt door garbagecollection wanneer bestaande verwijzingen nog bestaan.

Wanneer u de TableMappings.Add methode op een DataAdapter aanroept en u de brontabelparameter expliciet toe wijst aan een lege tekenreeks, wordt de gegevensset gevuld met behulp van de brontabel, maar wordt de gegevensset gevuld met niets. In het volgende voorbeeld rDataSet wordt bijvoorbeeld niets ingevuld.

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

In dit voorbeeld ziet u hoe u een resultaat kunt overslaan bij het omgaan met meerdere resultaten.

In het volgende voorbeeld wordt een OleDbDataAdapter ADO gebruikt om een DataTable ADO Recordsetin te vullen. In dit voorbeeld wordt ervan uitgegaan dat u een ADO Recordsethebt gemaakt.

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();

Zie ook

Van toepassing op

Fill(DataSet, Object, String)

Hiermee worden rijen in de DataSet rijen toegevoegd of vernieuwd die overeenkomen met die in een ADO Recordset of Record object met behulp van het opgegeven DataSet, ADO-object en de naam van de brontabel.

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

Parameters

dataSet
DataSet

A DataSet voor het doorvoeren van records en, indien nodig, schema.

ADODBRecordSet
Object

Een ADO Recordset of Record object.

srcTable
String

De brontabel die wordt gebruikt voor de tabeltoewijzingen.

Retouren

Het aantal rijen dat is toegevoegd aan of vernieuwd in de DataSet. Dit omvat geen rijen die worden beïnvloed door instructies die geen rijen retourneren.

Uitzonderingen

De brontabel is ongeldig.

Opmerkingen

De koppeling tussen ActiveX Data Objects (ADO) en ADO.NET is een bewerking in één richting waarin u gegevens van ADO naar de DataSet kunt kopiëren, maar eventuele updates van de gegevens moeten worden verwerkt door ADO.NET.

De Fill methode doorloopt meerdere resultaten door de NextRecordset methode aan te roepen op de Recordset, de invoer Recordset te sluiten bij voltooiing van de Fill bewerking.

Met Fill de bewerking worden de rijen toegevoegd aan het opgegeven doelobject DataTable in het DataSetobject, waardoor het DataTable object wordt gemaakt als het nog niet bestaat. Wanneer u een DataTable object maakt, worden met de Fill bewerking gewoonlijk alleen metagegevens van de kolomnaam gemaakt. Als de MissingSchemaAction eigenschap echter is ingesteld op AddWithKey, worden ook de juiste primaire sleutels en beperkingen gemaakt.

Als de primaire-sleutelgegevens aanwezig zijn, worden dubbele rijen op elkaar afgestemd en worden ze slechts één keer weergegeven in de DataTable weergave die overeenkomt met de DataSet. De primaire-sleutelgegevens kunnen worden ingesteld via FillSchema, door de PrimaryKey eigenschap van de DataTableeigenschap op te geven of door de MissingSchemaAction eigenschap in te stellen op AddWithKey.

Als u correct wilt functioneren met het .NET Framework Data Provider voor OLE DB, moet AddWithKey de systeemeigen OLE DB-provider vereiste primaire-sleutelgegevens verkrijgen door de eigenschap DBPROP_UNIQUEROWS in te stellen en vervolgens te bepalen welke kolommen primaire-sleutelkolommen zijn door DBCOLUMN_KEYCOLUMN in de IColumnsRowset te bekijken. De gebruiker kan ook expliciet de primaire-sleutelbeperkingen voor elke DataTablesleutel instellen. Dit zorgt ervoor dat binnenkomende records die overeenkomen met bestaande records worden bijgewerkt in plaats van toegevoegd.

Als de SelectCommand de resultaten van een OUTER JOIN retourneert, stelt de DataAdapter geen PrimaryKey-waarde in voor het resulterende DataTable. U moet expliciet de primaire sleutel definiëren om ervoor te zorgen dat dubbele rijen correct worden omgezet. Zie Primaire sleutels definiëren voor meer informatie.

Als de bewerking Recordset wordt gesloten voordat de Fill bewerking wordt gestart, worden er geen fouten weergegeven. Dit is vereist voor het verwerken van meerdere resultaten, omdat query's die geen rijen retourneren, worden aangegeven door een gesloten Recordset. De OleDbDataAdapter just oproepen NextRecordset op de gesloten Recordset en continue verwerking.

Als er een fout optreedt tijdens het vullen van de gegevensset, blijven rijen toegevoegd voordat de fout optreedt in de DataSet. De rest van de bewerking wordt afgebroken.

Als het DbDataAdapter object dubbele kolommen tegenkomt tijdens het vullen van een DataTablekolom, worden er namen gegenereerd voor de volgende kolommen, met behulp van het patroon 'columnname1', 'columnname2', 'columnname3', enzovoort. Als de binnenkomende gegevens niet-benoemde kolommen bevatten, worden ze in het DataSet patroon Kolom1, Kolom2 enzovoort geplaatst. Wanneer er meerdere resultatensets worden toegevoegd aan de DataSet resultatenset, wordt deze in een afzonderlijke tabel geplaatst. Aanvullende resultatensets worden benoemd door integrale waarden toe te voegen aan de opgegeven tabelnaam (bijvoorbeeld 'Tabel', 'Tabel1', 'Tabel2', enzovoort). Toepassingen die kolom- en tabelnamen gebruiken, moeten ervoor zorgen dat conflicten met deze naamgevingspatronen niet optreden.

Waarden in ADO Recordset of Record objecten worden geconverteerd naar algemene typen taalruntime voor opslag in de DataSet.

Note

Deze overbelasting van de Fill methode roept Close impliciet het ADO-object aan wanneer de vulbewerking is voltooid.

In het volgende voorbeeld wordt een OleDbDataAdapter ADO gebruikt om een DataSet ADO Recordset te vullen die een ADO-object Record is. In dit voorbeeld wordt ervan uitgegaan dat u een ADO RecordSet en Record object hebt gemaakt.

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();

Zie ook

Van toepassing op