Freigeben über


Hinzufügen von vorhandenen Einschränkungen zu einem "DataSet"

Die Fill Methode der DataAdapter füllt ein DataSet nur mit Tabellenspalten und Zeilen aus einer Datenquelle; Einschränkungen werden zwar häufig von der Datenquelle festgelegt, die Fill Methode fügt jedoch diese Schemainformationen nicht standardmäßig zu DataSet hinzu. Um eine DataSet mit vorhandenen Primärschlüsseleinschränkungsinformationen aus einer Datenquelle aufzufüllen, können Sie entweder die FillSchema Methode des DataAdapter aufrufen oder die MissingSchemaAction Eigenschaft der DataAdapterAddWithKey festlegen, bevor Sie Fill aufrufen. Dadurch wird sichergestellt, dass die Primärschlüsseleinschränkungen in der DataSet die der Datenquelle widerspiegeln. Informationen zu Fremdschlüsseleinschränkungen sind nicht enthalten und müssen explizit erstellt werden. Dies wird unter DataTable-Einschränkungen veranschaulicht.

Durch das Hinzufügen von Schemainformationen zu einer DataSet Datei vor dem Ausfüllen mit Daten wird sichergestellt, dass Primärschlüsseleinschränkungen in den DataTable Objekten im DataSet enthalten sind. Wenn daher zusätzliche Aufrufe zum Ausfüllen der DataSet Daten vorgenommen werden, werden die Primärschlüsselspalteninformationen verwendet, um neue Zeilen aus der Datenquelle mit aktuellen Zeilen in jeder DataTable abzugleichen, und aktuelle 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 eine Spalte in einer Datenquelle als auto-inkrementierend identifiziert wird, erstellen die FillSchema Methode oder die Fill Methode mit einem Parameter von AddWithKey ein DataColumn mit einer AutoIncrement-Eigenschaft, die auf true festgelegt ist. Sie müssen jedoch die Werte AutoIncrementStep und AutoIncrementSeed selbst festlegen. Weitere Informationen zum automatischen Inkrementieren von Spalten finden Sie unter Erstellen von AutoIncrement-Spalten.

Das Verwenden von FillSchema oder das Festlegen von MissingSchemaAction auf AddWithKey erfordert zusätzliche Verarbeitung an der Datenquelle, um Primärschlüsselspalteninformationen zu bestimmen. 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.

Das folgende Codebeispiel zeigt, wie Schemainformationen zu einem DataSet mithilfe von FillSchema hinzugefügt werden:

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 gezeigt, wie Schemainformationen zu DataSet mithilfe der Methode mit der Eigenschaft MissingSchemaAction.AddWithKey hinzugefügt werden:

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 das DataAdapter mehrere vom SelectCommand zurückgegebene Resultsets entgegen nimmt, werden mehrere Tabellen im DataSet erstellt. Die Tabellen erhalten einen nullbasierten inkrementellen Standardnamen von TableN, beginnend mit Table anstelle von "Table0". Wenn ein Tabellenname als Argument an die FillSchema Methode übergeben wird, erhalten die Tabellen einen nullbasierten inkrementellen Namen des Musters TableNameN, beginnend mit TableName anstelle von "TableName0".

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. Beim Zurückgeben von Schemainformationen für mehrere Resultsets mithilfe des OleDbDataAdapter wird empfohlen, beim Aufrufen der MissingSchemaAction Methode eine AddWithKey der Fill Schemainformationen anzugeben und abzurufen.

Weitere Informationen