Hinzufügen von vorhandenen Einschränkungen zu einem "DataSet"
Die Fill-Methode des DataAdapter füllt ein DataSet nur mit den Tabellenspalten und -zeilen aus einer Datenquelle auf. Einschränkungen werden zwar häufig von der Datenquelle festgelegt, die Fill-Methode fügt diese Schemainformationen dem DataSet jedoch nicht standardmäßig hinzu. Wenn Sie die Informationen zu vorhandenen Primärschlüsseleinschränkungen aus einer Datenquelle in ein DataSet übernehmen möchten, können Sie vor dem Aufrufen der Fill-Methode entweder die FillSchema-Methode des DataAdapter aufrufen oder die MissingSchemaAction-Eigenschaft des DataAdapter auf AddWithKey festlegen. Dadurch wird sichergestellt, dass die Primärschlüsseleinschränkungen in der DataSet-Klasse denen in der Datenquelle entsprechen. Informationen zu Fremdschlüsseleinschränkungen sind nicht enthalten und müssen explizit erstellt werden. Dies wird unter DataTable-Einschränkungen veranschaulicht.
Wenn Sie einer DataSet-Klasse vor dem Füllen mit Daten Schemainformationen hinzufügen, wird sichergestellt, dass Primärschlüsseleinschränkungen in den DataTable-Objekten in der DataSet-Klasse enthalten sind. Folglich werden die Primärschlüsselspalteninformationen bei weiteren Aufrufen zum Füllen der DataSet-Klasse zum Abgleich neuer Zeilen aus der Datenquelle mit den aktuellen Zeilen in allen DataTable-Klassen verwendet, und die aktuellen Daten in den Tabellen werden mit Daten aus der Datenquelle überschrieben. Ohne die Schemainformationen werden die neuen Zeilen aus der Datenquelle an die DataSet-Klasse angefügt, was zu doppelten Zeilen führt.
Hinweis
Wenn in einer Datenquelle eine Spalte mit automatischer Inkrementierung ermittelt wird, erstellt die FillSchema-Methode bzw. die Fill-Methode, deren MissingSchemaAction-Eigenschaft den Wert AddWithKey aufweist, eine DataColumn, deren AutoIncrement-Eigenschaft auf true
festgelegt ist. Die Werte für AutoIncrementStep und AutoIncrementSeed müssen Sie jedoch selbst festlegen. Weitere Informationen zum automatischen Inkrementieren von Spalten finden Sie unter Erstellen von AutoIncrement-Spalten.
Wenn Sie die FillSchema-Methode verwenden oder die MissingSchemaAction-Eigenschaft auf AddWithKey festlegen, sind zum Ermitteln von Informationen zur Primärschlüsselspalte zusätzliche Verarbeitungsschritte in der Datenquelle erforderlich. Diese zusätzlichen Verarbeitungsschritte können zu einem Leistungsabfall führen. Wenn Sie die Primärschlüsselinformationen zur Entwurfszeit kennen, empfiehlt es sich, zum Erzielen einer optimalen Leistung die Primärschlüsselspalte(n) explizit in der richtigen Reihenfolge anzugeben. Informationen zum expliziten Festlegen von Primärschlüsselinformationen für eine Tabelle finden Sie unter Definieren von Primärschlüsseln.
Im folgenden Codebeispiel wird dargestellt, wie Sie einem DataSet mit der FillSchema-Methode Schemainformationen hinzufügen:
Dim custDataSet As New DataSet()
custAdapter.FillSchema(custDataSet, SchemaType.Source, "Customers")
custAdapter.Fill(custDataSet, "Customers")
var custDataSet = new DataSet();
custAdapter.FillSchema(custDataSet, SchemaType.Source, "Customers");
custAdapter.Fill(custDataSet, "Customers");
Im folgenden Codebeispiel wird dargestellt, wie Sie einem DataSet mit der MissingSchemaAction.AddWithKey-Eigenschaft der Fill-Methode Schemainformationen hinzufügen:
Dim custDataSet As New DataSet()
custAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
custAdapter.Fill(custDataSet, "Customers")
var custDataSet = new DataSet();
custAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
custAdapter.Fill(custDataSet, "Customers");
Umgang mit mehreren Resultsets
Wenn der DataAdapter feststellt, dass von der SelectCommand-Eigenschaft mehrere Resultsets zurückgegeben werden, erstellt er mehrere Tabellen im DataSet. Diesen Tabellen werden Standardnamen nach dem Muster TableN zugewiesen, beginnend bei 0, allerdings mit Table statt Table0. Wenn der Tabellenname als Argument an die FillSchema-Methode übergeben wird, erhalten die Tabellen standardmäßig nullbasierte Namen nach dem Schema TableNameN (beginnend mit TableName statt „TableName0“), die jeweils um eins erhöht werden.
Hinweis
Wenn die FillSchema-Methode des OleDbDataAdapter-Objekts für einen Befehl aufgerufen wird, der mehrere Resultsets zurückgibt, werden nur die Schemainformationen aus dem ersten Resultset zurückgegeben. Wenn Schemainformationen für mehrere Resultsets mit dem OleDbDataAdapter zurückgegeben werden, empfiehlt es sich, eine MissingSchemaAction mit dem Wert AddWithKey anzugeben und die Schemainformationen beim Aufruf der Fill-Methode abzurufen.