OleDbDataAdapter.Fill Methode

Definition

Aktualisiert Zeilen im DataSet oder fügt Zeilen hinzu, um Übereinstimmung mit den Zeilen in einem ADO-Recordset-Objekt oder einem ADO-Record-Objekt herzustellen.

Überlädt

Fill(DataTable, Object)

Aktualisiert Zeilen in einer DataTable oder fügt Zeilen hinzu, um Übereinstimmung mit den Zeilen in einem ADO-Recordset-Objekt oder einem Record-Objekt herzustellen, wobei die angegebene DataTable und die angegebenen ADO-Objekte verwendet werden.

Fill(DataSet, Object, String)

Aktualisiert Zeilen im DataSet oder fügt Zeilen hinzu, um Übereinstimmung mit den Zeilen in einem ADO-Recordset-Objekt oder einem ADO-Record-Objekt herzustellen, wobei das angegebene DataSet, das angegebene ADO-Objekt und der angegebene Quelltabellenname verwendet werden.

Fill(DataTable, Object)

Aktualisiert Zeilen in einer DataTable oder fügt Zeilen hinzu, um Übereinstimmung mit den Zeilen in einem ADO-Recordset-Objekt oder einem Record-Objekt herzustellen, wobei die angegebene DataTable und die angegebenen ADO-Objekte verwendet werden.

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

Parameter

dataTable
DataTable

Ein DataTable, das mit Datensätzen und bei Bedarf mit einem Schema gefüllt werden soll.

ADODBRecordSet
Object

Ein ADO-Recordset-Objekt oder ein ADO-Record-Objekt.

Gibt zurück

Int32

Die Anzahl der erfolgreich aktualisierten Zeilen in der DataTable. Dies schließt keine Zeilen ein, die von Anweisungen betroffen sind, die keine Zeilen zurückgeben.

Hinweise

Der Link zwischen ActiveX Datenobjekten (ADO) und ADO.NET ist ein einmaliger Vorgang, in dem Sie Daten von ADO in den DataSetADO kopieren können, aber alle Updates an die Daten müssen von ADO.NET behandelt werden.

Diese Überladung der Fill Methode schließt die Eingabe Recordset beim Abschluss des Fill Vorgangs nicht.

Beim Behandeln von Batch-SQL Anweisungen, die mehrere Ergebnisse zurückgeben, ruft diese Implementierung und Fill FillSchema für das OLE DB.NET Framework Datenanbieter Schemainformationen nur für das erste Ergebnis ab.

Der Fill Vorgang fügt die Zeilen dem angegebenen Zielobjekt DataTable im DataSetObjekt hinzu, das das DataTable Objekt erstellt, wenn es noch nicht vorhanden ist. Wenn Sie ein DataTable Objekt erstellen, erstellt der Fill Vorgang nur Spaltennamenmetadaten. Wenn die MissingSchemaAction Eigenschaft jedoch auf AddWithKey, geeignete Primärschlüssel und Einschränkungen festgelegt ist, werden auch erstellt.

Sie können die Fill Methode mehrmals auf demselben DataTableVerwenden. Wenn ein Primärschlüssel vorhanden ist, werden eingehende Zeilen mit übereinstimmenden Zeilen zusammengeführt, die bereits vorhanden sind. Wenn kein Primärschlüssel vorhanden ist, werden eingehende Zeilen an den DataTable. Wenn Primärschlüsselinformationen vorhanden sind, werden doppelte Zeilen abgeglichen und werden nur einmal in den DataTable entsprechenden DataSetZeilen angezeigt. Primärschlüsselinformationen können entweder durch FillSchemaFestlegen der PrimaryKey Eigenschaft des Objekts oder durch Festlegen der DataTableMissingSchemaAction Eigenschaft auf AddWithKeyfestgelegt werden.

Wenn vom SelectCommand die Ergebnisse eines OUTER JOIN zurückgegeben werden, wird vom DataAdapter kein PrimaryKey -Wert für die resultierende DataTablefestgelegt. Sie müssen den Primärschlüssel explizit definieren, um sicherzustellen, dass doppelte Zeilen ordnungsgemäß aufgelöst werden. Weitere Informationen finden Sie unter Definieren von Primärschlüsseln.

Wenn Sie mit dem .NET Framework Datenanbieter für OLE DB ordnungsgemäß funktionieren möchten, muss der systemeigene OLE DB-Anbieter erforderliche Primärschlüsselinformationen abrufen, indem Sie die DBPROP_UNIQUEROWS-Eigenschaft festlegen und dann bestimmen, welche Spalten Primärschlüsselspalten sind, AddWithKey indem Sie DBCOLUMN_KEYCOLUMN im IColumnsRowsetBereich untersuchen. Alternativ kann der Benutzer die Primärschlüsseleinschränkungen für jeden DataTableexplizit festlegen. Dadurch wird sichergestellt, dass eingehende Datensätze, die mit vorhandenen Datensätzen übereinstimmen, statt angefügt werden.

Wenn die OleDbDataAdapter doppelten Spalten beim Auffüllen einer DataTableSpalte auftreten, generiert sie Namen für die nachfolgenden Spalten, mit dem Muster "columnname1", "columnname2", "columnname3" usw. Leere Spaltennamen werden dem , mithilfe einer leeren Zeichenfolge für die erste Spalte, gefolgt von "1", "2", "3" und so weiter für die nachfolgenden leeren Spalten hinzugefügt DataTable.

Werte in ADO Recordset oder Record Objekten werden in allgemeine Sprachlaufzeittypen für den Speicher in der DataSetDatei konvertiert.

Achtung

Diese Überladung der Fill Methode ruft Close das ADO-Objekt nicht implizit auf, wenn der Füllvorgang abgeschlossen ist. Rufen Sie daher immer auf Close , wenn Sie mit ADO Recordset oder Record Objekten fertig sind. Dadurch wird sichergestellt, dass die zugrunde liegende Verbindung mit einer Datenquelle rechtzeitig veröffentlicht wird und auch mögliche Zugriffsverletzungen aufgrund von nicht verwalteten ADO-Objekten verhindert werden, die von der Müllsammlung zurückgegeben werden, wenn vorhandene Verweise noch vorhanden sind.

Wenn Sie die TableMappings.Add Methode für eine DataAdapter Methode aufrufen und den Quelltabellenparameter explizit einer leeren Zeichenfolge zuordnen, wird das Dataset mit der Quelltabelle erfolgreich gefüllt, aber das Dataset wird mit nichts gefüllt. Im folgenden Beispiel rDataSet wird beispielsweise nichts ausgefüllt.

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

In diesem Beispiel wird gezeigt, wie Sie beim Umgang mit mehreren Ergebnissen ein Ergebnis überspringen können.

Im folgenden Beispiel wird eine OleDbDataAdapter ADO-Eigenschaft verwendet, um eine DataTable ADO Recordsetzu füllen. In diesem Beispiel wird davon ausgegangen, dass Sie ein ADO Recordseterstellt haben.

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

Siehe auch

Gilt für

Fill(DataSet, Object, String)

Aktualisiert Zeilen im DataSet oder fügt Zeilen hinzu, um Übereinstimmung mit den Zeilen in einem ADO-Recordset-Objekt oder einem ADO-Record-Objekt herzustellen, wobei das angegebene DataSet, das angegebene ADO-Objekt und der angegebene Quelltabellenname verwendet werden.

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

Parameter

dataSet
DataSet

Ein DataSet, das mit Datensätzen und bei Bedarf mit einem Schema gefüllt werden soll.

ADODBRecordSet
Object

Ein ADO-Recordset-Objekt oder ein ADO-Record-Objekt.

srcTable
String

Die Quelltabelle für die Tabellenzuordnungen.

Gibt zurück

Int32

Die Anzahl der Zeilen, die dem DataSet erfolgreich hinzufügt bzw. darin aktualisiert wurden. Dies schließt keine Zeilen ein, die von Anweisungen betroffen sind, die keine Zeilen zurückgeben.

Ausnahmen

Die Quelltabelle ist ungültig.

Hinweise

Der Link zwischen ActiveX Datenobjekten (ADO) und ADO.NET ist ein einmaliger Vorgang, in dem Sie Daten von ADO in den DataSetADO kopieren können, aber alle Updates an die Daten müssen von ADO.NET behandelt werden.

Die Methode wird durch mehrere Ergebnisse durch aufrufen, indem sie Fill die NextRecordset Methode auf dem Recordset, schließen der Eingabe Recordset am Abschluss des Fill Vorgangs.

Der Fill Vorgang fügt die Zeilen dem angegebenen Zielobjekt DataTable im DataSetObjekt hinzu, das das DataTable Objekt erstellt, wenn es noch nicht vorhanden ist. Wenn Sie ein DataTable Objekt erstellen, erstellt der Fill Vorgang nur Spaltennamenmetadaten. Wenn die MissingSchemaAction Eigenschaft jedoch auf AddWithKey, geeignete Primärschlüssel und Einschränkungen festgelegt ist, werden auch erstellt.

Wenn Primärschlüsselinformationen vorhanden sind, werden doppelte Zeilen abgeglichen und werden nur einmal in den DataTable entsprechenden DataSetZeilen angezeigt. Primärschlüsselinformationen können entweder durch FillSchemaFestlegen der PrimaryKey Eigenschaft des Objekts oder durch Festlegen der DataTableMissingSchemaAction Eigenschaft auf AddWithKeyfestgelegt werden.

Um mit dem .NET Framework Datenanbieter für OLE DB ordnungsgemäß zu funktionieren, erfordert der systemeigene OLE DB-Anbieter die erforderlichen Primärschlüsselinformationen, indem Sie die DBPROP_UNIQUEROWS-Eigenschaft festlegen und dann bestimmen, welche Spalten Primärschlüsselspalten sind, AddWithKey indem Sie DBCOLUMN_KEYCOLUMN im IColumnsRowset untersuchen. Alternativ kann der Benutzer die Primärschlüsseleinschränkungen für jeden DataTableexplizit festlegen. Dadurch wird sichergestellt, dass eingehende, vorhandenen Datensätzen entsprechende Datensätze nicht angefügt, sondern aktualisiert werden.

Wenn vom SelectCommand die Ergebnisse eines OUTER JOIN zurückgegeben werden, wird vom DataAdapter kein PrimaryKey -Wert für die resultierende DataTablefestgelegt. Sie müssen den Primärschlüssel explizit definieren, um sicherzustellen, dass doppelte Zeilen ordnungsgemäß aufgelöst werden. Weitere Informationen finden Sie unter Definieren von Primärschlüsseln.

Wenn dies Recordset vor dem Start des Fill Vorgangs geschlossen wird, werden keine Fehlerergebnisse angezeigt. Dies ist für die Behandlung mehrerer Ergebnisse erforderlich, da Abfragen, die keine Zeilen zurückgeben, durch einen geschlossenen Recordsetangegeben werden. Die OleDbDataAdapter just aufruft NextRecordset die geschlossene Recordset und fortgesetzte Verarbeitung.

Wenn beim Auffüllen des Datentyps ein Fehler aufgetreten ist, bleiben Zeilen, die vor dem Auftreten des Fehlers hinzugefügt wurden, in der DataSet. Der Rest des Vorgangs wird abgebrochen.

Wenn das DbDataAdapter Objekt doppelte Spalten beim Auffüllen einer DataTableSpalte auftritt, generiert er Namen für die nachfolgenden Spalten, indem das Muster "columnname1", "columnname2", "columnname3" usw. verwendet wird. Wenn die eingehenden Daten unbenannte Spalten enthalten, werden sie platziert, der DataSet gemäß dem Muster "Column1", "Column2" usw. Wenn mehrere Ergebnissätze dem DataSet einzelnen Ergebnissatz hinzugefügt werden, wird in einer separaten Tabelle platziert. Zusätzliche Ergebnissätze werden durch Anfügen von integralen Werten an den angegebenen Tabellennamen (z. B. "Table", "Table1", "Table2" usw.) benannt. Anwendungen, die Spalten- und Tabellennamen verwenden, sollten sicherstellen, dass Konflikte mit diesen Benennungsmustern nicht auftreten.

Werte in ADO Recordset oder Record Objekten werden in allgemeine Sprachlaufzeittypen für den Speicher in der DataSetDatei konvertiert.

Hinweis

Diese Überladung der Fill Methode ruft Close implizit das ADO-Objekt auf, wenn der Füllvorgang abgeschlossen ist.

Im folgenden Beispiel wird ein OleDbDataAdapter ADO-Objekt verwendet, um ein DataSet ADO-Objekt Recordset Record zu füllen. In diesem Beispiel wird davon ausgegangen, dass Sie ein ADO RecordSet und Record ein Objekt erstellt haben.

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

Siehe auch

Gilt für