OleDbDataAdapter.Fill Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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- |
Fill(DataSet, Object, String) |
Aktualisiert Zeilen im DataSet oder fügt Zeilen hinzu, um Übereinstimmung mit den Zeilen in einem ADO- |
Fill(DataTable, Object)
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
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 AddWithKey
festgelegt 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 IColumnsRowset
Bereich 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 Recordset
zu füllen. In diesem Beispiel wird davon ausgegangen, dass Sie ein ADO Recordset
erstellt 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)
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
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 AddWithKey
festgelegt 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 Recordset
angegeben 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();