Udostępnij przez


Dodawanie istniejących ograniczeń do zestawu danych

Dotyczy: .NET Framework .NET Standard

Pobieranie ADO.NET

Metoda FillSqlDataAdapter wypełnia DataSet tylko kolumny i wiersze tabeli ze źródła danych; chociaż ograniczenia są często ustawiane przez źródło danych, metoda Fill nie dodaje tych informacji schematu do DataSet domyślnie.

Aby wypełnić element DataSet istniejącymi informacjami o ograniczeniu klucza podstawowego ze źródła danych, możesz wywołać FillSchema metodę elementu DataAdapter lub ustawić MissingSchemaAction właściwość elementu DataAdapter na AddWithKey przed wywołaniem metody Fill. Zapewni to, że ograniczenia klucza podstawowego w zestawie danych odzwierciedlają te ograniczenia w źródle danych.

Uwaga / Notatka

Informacje o ograniczeniu klucza obcego nie są zawarte i należy je utworzyć ręcznie.

Dodanie informacji o schemacie do elementu DataSet przed wypełnieniem go danymi gwarantuje, że ograniczenia klucza podstawowego są uwzględniane w DataTable obiektach w zestawie danych. W związku z tym, gdy zostaną wykonane dodatkowe wywołania w celu wypełnienia zestawu danych , informacje o kolumnie klucza podstawowego są używane do dopasowywania nowych wierszy ze źródła danych z bieżącymi wierszami w każdej tabeli DataTable, a bieżące dane w tabelach są zastępowane danymi ze źródła danych. Bez informacji o schemacie nowe wiersze ze źródła danych są dołączane do zestawu danych, co powoduje zduplikowanie wierszy.

Uwaga / Notatka

Jeśli kolumna w źródle danych zostanie zidentyfikowana jako autoinkrementacja, metoda FillSchema lub metoda Fill z wartością MissingSchemaActionAddWithKey, tworzy kolumnę DataColumn z właściwością AutoIncrement ustawioną na true. Należy jednak samodzielnie ustawić wartości AutoIncrementStep i AutoIncrementSeed .

Uwaga / Notatka

Użycie FillSchema lub ustawienie opcji MissingSchemaAction na AddWithKey wymaga dodatkowego przetwarzania w źródle danych w celu uzyskania informacji o kolumnach kluczy podstawowych. To dodatkowe przetwarzanie może utrudnić wydajność. Jeśli znasz podstawowe informacje o kluczu w czasie projektowania, zalecamy jawne określenie kolumny lub kolumn klucza podstawowego w celu uzyskania optymalnej wydajności.

W poniższym przykładzie kodu pokazano, jak dodać informacje o schemacie do zestawu danych przy użyciu polecenia FillSchema:

// Assumes that connection is a valid SqlConnection object.
string queryString =
"SELECT CustomerID, CompanyName FROM dbo.Customers";
SqlDataAdapter adapter = new SqlDataAdapter(queryString, connection);

DataSet customers = new DataSet();
adapter.Fill(customers, "Customers");

W poniższym przykładzie kodu pokazano, jak dodać informacje o schemacie do zestawu danych przy użyciu MissingSchemaAction właściwości i Fill metody :

// Assumes that customerConnection and orderConnection are valid SqlConnection objects.
SqlDataAdapter custAdapter = new SqlDataAdapter(
"SELECT * FROM dbo.Customers", customerConnection);
SqlDataAdapter ordAdapter = new SqlDataAdapter(
"SELECT * FROM Orders", orderConnection);

DataSet customerOrders = new DataSet();

custAdapter.Fill(customerOrders, "Customers");
ordAdapter.Fill(customerOrders, "Orders");

DataRelation relation = customerOrders.Relations.Add("CustOrders",
customerOrders.Tables["Customers"].Columns["CustomerID"],
customerOrders.Tables["Orders"].Columns["CustomerID"]);

foreach (DataRow pRow in customerOrders.Tables["Customers"].Rows)
{
    Console.WriteLine(pRow["CustomerID"]);
    foreach (DataRow cRow in pRow.GetChildRows(relation))
        Console.WriteLine("\t" + cRow["OrderID"]);
}

Obsługa wielu zestawów wyników

Jeśli DataAdapter napotka wiele zestawów wyników zwróconych z elementu SelectCommand, utworzy wiele tabel w zestawie danych. Tabele będą mieć domyślną nazwę inkrementowaną od zera w formie TabelaN, zaczynając od Tabela zamiast "Table0". Tabele będą mieć przyrostową nazwę typu TableNameN opartą na zerach, zaczynając od tableName zamiast "TableName0 ", jeśli nazwa tabeli jest przekazywana jako argument do FillSchema metody.

Zobacz także