Freigeben über


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)

Quelle:
OleDbDataAdapter.cs
Quelle:
OleDbDataAdapter.cs
Quelle:
OleDbDataAdapter.cs

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

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

Die Verbindung zwischen ActiveX-Datenobjekten (ActiveX Data Objects, ADO) und ADO.NET ist ein unidirektionales Verfahren, bei dem Sie Daten aus ADO in das DataSetkopieren können, aber alle Aktualisierungen der Daten müssen von ADO.NET verarbeitet werden.

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

Bei der Behandlung von SQL-Batchanweisungen, die mehrere Ergebnisse zurückgeben, ruft diese Implementierung von Fill und FillSchema für den OLE DB.NET Framework-Datenanbieter Schemainformationen nur für das erste Ergebnis ab.

Der Fill Vorgang fügt die Zeilen dem angegebenen Zielobjekt DataTable in hinzu DataSet, und erstellt das DataTable -Objekt, sofern es noch nicht vorhanden ist. Wenn Sie ein DataTable Objekt erstellen, erstellt der Fill Vorgang normalerweise nur Metadaten für Spaltennamen. Wenn die MissingSchemaAction -Eigenschaft jedoch auf AddWithKeyfestgelegt ist, werden auch die entsprechenden Primärschlüssel und Einschränkungen erstellt.

Sie können die Fill -Methode mehrmals für dieselbe 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 DataTableangefügt. Wenn Primärschlüsselinformationen vorhanden sind, werden alle doppelten Zeilen abgeglichen und nur einmal in der angezeigt, die DataTable dem DataSetentspricht. Primärschlüsselinformationen können entweder über FillSchemafestgelegt werden, indem Sie die PrimaryKey -Eigenschaft von DataTableangeben oder die MissingSchemaAction -Eigenschaft auf AddWithKeyfestlegen.

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 Löschen von Primärschlüsseln.

Um ordnungsgemäß mit dem .NET Framework-Datenanbieter für OLE DB zu funktionieren, AddWithKey muss der native OLE DB-Anbieter die erforderlichen Primärschlüsselinformationen abrufen, indem er die DBPROP_UNIQUEROWS-Eigenschaft festlegt, und bestimmt dann, welche Spalten Primärschlüsselspalten sind, indem DBCOLUMN_KEYCOLUMN in IColumnsRowsetuntersucht wird. 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, aktualisiert und nicht angefügt werden.

Wenn doppelte OleDbDataAdapter Spalten beim Auffüllen eines DataTableauftreten, generiert es Namen für die nachfolgenden Spalten unter Verwendung des Musters "Spaltenname1", "Spaltenname2", "Spaltenname3" usw. Leere Spaltennamen werden dem DataTablehinzugefügt, wobei eine leere Zeichenfolge für die erste Spalte verwendet wird, gefolgt von "1", "2", "3" usw. für die nachfolgenden leeren Spalten.

Werte in ADO Recordset oder Record -Objekten werden in Common Language Runtime-Typen für die Speicherung in konvertiert DataSet.

Achtung

Diese Überladung der Fill -Methode ruft das ADO-Objekt nicht implizit auf Close , wenn der Füllvorgang abgeschlossen ist. Rufen Sie daher immer auf Close , wenn Sie mit der Verwendung von ADO Recordset oder Record -Objekten fertig sind. Dadurch wird sichergestellt, dass die zugrunde liegende Verbindung mit einer Datenquelle rechtzeitig freigegeben wird, und verhindert auch mögliche Zugriffsverletzungen, da nicht verwaltete ADO-Objekte von der Garbage Collection wieder abgerufen werden, wenn noch vorhandene Verweise vorhanden sind.

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

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

In diesem Beispiel wird gezeigt, wie Sie ein Ergebnis überspringen können, wenn sie mit mehreren Ergebnissen zu tun haben.

Im folgenden Beispiel wird ein OleDbDataAdapter verwendet, um eine DataTable mit einem ADO Recordsetauszufü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();  

Weitere Informationen

Gilt für:

Fill(DataSet, Object, String)

Quelle:
OleDbDataAdapter.cs
Quelle:
OleDbDataAdapter.cs
Quelle:
OleDbDataAdapter.cs

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

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

Die Verbindung zwischen ActiveX-Datenobjekten (ActiveX Data Objects, ADO) und ADO.NET ist ein unidirektionales Verfahren, bei dem Sie Daten aus ADO in das DataSetkopieren können, aber alle Aktualisierungen der Daten müssen von ADO.NET verarbeitet werden.

Die Fill -Methode durchläuft mehrere Ergebnisse, indem sie die NextRecordset -Methode für aufruft Recordset, und schließt die Eingabe Recordset nach Abschluss des Fill Vorgangs.

Der Fill Vorgang fügt die Zeilen dem angegebenen Zielobjekt DataTable in hinzu DataSet, und erstellt das DataTable -Objekt, sofern es noch nicht vorhanden ist. Wenn Sie ein DataTable Objekt erstellen, erstellt der Fill Vorgang normalerweise nur Metadaten für Spaltennamen. Wenn die MissingSchemaAction -Eigenschaft jedoch auf AddWithKeyfestgelegt ist, werden auch die entsprechenden Primärschlüssel und Einschränkungen erstellt.

Wenn Primärschlüsselinformationen vorhanden sind, werden alle doppelten Zeilen abgeglichen und nur einmal in der angezeigt, die DataTable dem DataSetentspricht. Primärschlüsselinformationen können entweder über FillSchemafestgelegt werden, indem Sie die PrimaryKey -Eigenschaft von DataTableangeben oder die MissingSchemaAction -Eigenschaft auf AddWithKeyfestlegen.

Um ordnungsgemäß mit dem .NET Framework-Datenanbieter für OLE DB zu funktionieren, AddWithKey muss der native OLE DB-Anbieter die erforderlichen Primärschlüsselinformationen abrufen, indem er die DBPROP_UNIQUEROWS-Eigenschaft festlegt, und dann ermitteln, welche Spalten Primärschlüsselspalten sind, indem DBCOLUMN_KEYCOLUMN im IColumnsRowset untersucht wird. 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 Löschen von Primärschlüsseln.

Wenn der Recordset vor dem Start des Fill Vorgangs geschlossen wird, tritt kein Fehler auf. Dies ist für die Behandlung mehrerer Ergebnisse erforderlich, da Abfragen, die keine Zeilen zurückgeben, durch ein geschlossenes Recordsetangegeben werden. Der OleDbDataAdapter ruft NextRecordset einfach die geschlossene Recordset auf und setzt die Verarbeitung fort.

Wenn beim Auffüllen des Datasets ein Fehler auftritt, bleiben zeilen, die vor dem Auftreten des Fehlers hinzugefügt wurden, in .DataSet Der Rest des Vorgangs wird abgebrochen.

Wenn das DbDataAdapter Objekt beim Auffüllen eines DataTableauf doppelte Spalten stößt, generiert es Namen für die nachfolgenden Spalten, wobei das Muster "Spaltenname1", "Spaltenname2", "Spaltenname3" usw. verwendet wird. Wenn die eingehenden Daten unbenannte Spalten enthalten, werden sie platziert, der DataSet gemäß dem Muster "Column1", "Column2" usw. Wenn mehrere Resultsets hinzugefügt werden, wird jedes DataSet Resultset in einer separaten Tabelle platziert. Zusätzliche Resultsets werden benannt, indem integrale Werte an den angegebenen Tabellennamen angefügt werden (z. B. "Table", "Table1", "Table2" usw.). Anwendungen, die Spalten- und Tabellennamen verwenden, sollten sicherstellen, dass konflikte mit diesen Benennungsmustern nicht auftreten.

Werte in ADO Recordset oder Record -Objekten werden in Common Language Runtime-Typen für die Speicherung in konvertiert DataSet.

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 verwendet, um ein DataSet mit einem ADO-Objekt Recordset auszufüllen, das ein ADO-Objekt Record ist. In diesem Beispiel wird davon ausgegangen, dass Sie ein ADO RecordSet und Record -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();  

Weitere Informationen

Gilt für: