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)
- Quelle:
- OleDbDataAdapter.cs
- Quelle:
- 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
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 AddWithKey
festgelegt 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 AddWithKey
festlegen.
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 IColumnsRowset
untersucht 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 Recordset
auszufü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();
Weitere Informationen
Gilt für:
Fill(DataSet, Object, String)
- Quelle:
- OleDbDataAdapter.cs
- Quelle:
- 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
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 AddWithKey
festgelegt 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 AddWithKey
festlegen.
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 Recordset
angegeben 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();