Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: .NET Framework
.NET
Standard
ADO.NET DataSet to reprezentacja danych rezydenta pamięci, która zapewnia spójny model programowania relacyjnego niezależnie od źródła danych. Reprezentuje DataSet kompletny zestaw danych, który zawiera tabele, ograniczenia i relacje między tabelami.
DataSet Ponieważ obiekt jest niezależny od źródła danych, DataSet obiekt może zawierać dane lokalne w aplikacji i dane z wielu źródeł danych. Interakcja z istniejącymi źródłami danych jest kontrolowana za pośrednictwem elementu DataAdapter.
Właściwość SelectCommand obiektu DataAdapter to obiekt Command, który pobiera dane ze źródła danych. Właściwości InsertCommand, UpdateCommand, DeleteCommand i DataAdapter to obiekty Command, które zarządzają aktualizacjami danych w źródle danych, zgodnie z modyfikacjami wprowadzonymi do danych w obiekcie DataSet. Te właściwości zostały szczegółowo omówione w temacie Aktualizowanie źródeł danych za pomocą elementów DataAdapters.
Metoda FillDataAdapter jest używana do wypełniania struktury DataSet wynikami działania SelectCommand z DataAdapter.
Fill jako swoje argumenty przyjmuje DataSet, które ma zostać wypełnione, oraz obiekt DataTable lub nazwę DataTable, który ma być wypełniony wierszami zwróconymi z SelectCommand.
Uwaga / Notatka
DataAdapter Pobieranie całej tabeli wymaga czasu, zwłaszcza jeśli w tabeli znajduje się wiele wierszy. Dzieje się tak, ponieważ uzyskiwanie dostępu do bazy danych, lokalizowanie i przetwarzanie danych, a następnie przesyłanie danych do klienta jest czasochłonne. Ściąganie całej tabeli do klienta powoduje również zablokowanie wszystkich wierszy na serwerze. Aby zwiększyć wydajność, możesz użyć WHERE klauzuli , aby znacznie zmniejszyć liczbę wierszy zwracanych do klienta. Możesz również zmniejszyć ilość danych zwracanych do klienta, jawnie wyświetlając tylko wymagane kolumny w instrukcji SELECT . Innym dobrym rozwiązaniem jest pobieranie wierszy partiami (na przykład po kilkaset wierszy naraz) i pobieranie kolejnej partii dopiero po zakończeniu przetwarzania bieżącej partii przez klienta.
Metoda Fill używa obiektu DataReader domyślnie do zwracania nazw kolumn i typów, które są używane do tworzenia tabel w obiekcie DataSet, oraz danych do wypełnienia wierszy tabel w DataSet. Tabele i kolumny są tworzone tylko wtedy, gdy jeszcze nie istnieją; w przeciwnym razie Fill używa istniejącego DataSet schematu. Typy kolumn są tworzone jako typy programu .NET Framework zgodnie z tabelami w mapowaniach typów danych w ADO.NET. Klucze podstawowe nie są tworzone, chyba że istnieją w źródle danych i Fill stwierdza istnienie klucza podstawowego dla tabeli, zastąpi dane w DataSet danymi ze źródła danych dla wierszy, gdzie wartości kolumny klucza podstawowego odpowiadają wartościom wierszy zwróconych ze źródła danych. Jeśli nie znaleziono klucza podstawowego, dane są dołączane do tabel w pliku DataSet.
Fill używa wszelkich istniejących mapowań podczas wypełniania elementu DataSet (zobacz DataAdapter, DataTable i DataColumn Mappings).
Uwaga / Notatka
Jeśli instrukcja SelectCommand zwraca wyniki sprzężenia zewnętrznego, parametr DataAdapter nie ustawia wartości PrimaryKey dla wynikowego DataTable. Należy zdefiniować PrimaryKey samodzielnie, aby upewnić się, że zduplikowane wiersze są poprawnie rozpoznawane.
Poniższy przykład kodu tworzy wystąpienie obiektu SqlDataAdapter , które używa SqlConnection obiektu do bazy danych programu Microsoft SQL Server Northwind i wypełnia obiekt DataTable na DataSet liście klientów. Instrukcja SQL i SqlConnection argumenty przekazane do konstruktora SqlDataAdapter są używane do tworzenia SelectCommand właściwości SqlDataAdapter.
Example
// 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");
Uwaga / Notatka
Kod pokazany w tym przykładzie nie otwiera jawnie i nie zamyka pliku Connection. Metoda Fill niejawnie otwiera Connection, które jest używane przez DataAdapter jeżeli okaże się, że połączenie nie jest jeszcze otwarte. Jeśli Fill otworzył połączenie, to także je zamyka po zakończeniu przez Fill. Może to uprościć kod, gdy zajmujesz się pojedynczą operacją Fill, taką jak Fill lub Update. Jeśli jednak wykonujesz wiele operacji wymagających otwartego połączenia, możesz zwiększyć wydajność aplikacji, jawnie wywołując Open metodę Connection, wykonując operacje względem źródła danych, a następnie wywołując Close metodę .Connection Należy starać się zachować otwarte połączenia ze źródłem danych tak krótko, jak to możliwe, aby zwolnić zasoby do użytku przez inne aplikacje klienckie.
Wiele zestawów wyników
DataAdapter napotykając wiele zestawów wyników, tworzy wiele tabel w obiekcie DataSet. Tabele otrzymują przyrostową nazwę domyślną tabeliN, zaczynając od "Tabela" dla tabeli Table0. Jeśli nazwa tabeli jest przekazywana jako argument do Fill metody, tabele otrzymują przyrostową domyślną nazwę TableNameN, zaczynając od "TableName" dla tableName0.
Wypełnianie DataSet przy użyciu wielu DataAdapterów
Dowolna DataAdapter liczba obiektów może być używana z elementem DataSet. Każdy DataAdapter może służyć do wypełniania co najmniej jednego DataTable obiektu i odsyłania aktualizacji do odpowiedniego źródła danych.
DataRelation i Constraint obiekty można dodawać lokalnie do DataSet, co umożliwia powiązanie danych z niejednorodnych źródeł danych. Na przykład obiekt DataSet może zawierać dane z bazy danych programu Microsoft SQL Server, bazy danych IBM Db2 uwidocznionej za pośrednictwem OLE DB oraz źródła danych, które przesyła strumieniowo kod XML.
DataAdapter Co najmniej jeden obiekt może obsługiwać komunikację z poszczególnymi źródłami danych.
Example
Poniższy przykład kodu wypełnia listę klientów z Northwind bazy danych w programie Microsoft SQL Server oraz listę zamówień z bazy danych przechowywanej Northwind w programie Microsoft Access. Wypełnione tabele są powiązane z DataRelation, a lista klientów jest następnie wyświetlana wraz z jego zamówieniami.
// 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"]);
}
Typ dziesiętny programu SQL Server
Domyślnie dane DataSet są przechowywane przy użyciu typów danych platformy .NET. W przypadku większości aplikacji zapewniają one wygodną reprezentację informacji o źródle danych. Jednak ta reprezentacja może spowodować problem, gdy typ danych w źródle danych jest typem danych dziesiętnym lub liczbowym programu SQL Server. Typ danych platformy .NET decimal umożliwia maksymalnie 28 cyfr znaczących, natomiast typ danych programu SQL Server decimal umożliwia użycie 38 cyfr znaczących.
SqlDataAdapter Jeśli parametr określa podczas Fill operacji, że precyzja pola programu SQL Server decimal jest większa niż 28 znaków, bieżący wiersz nie jest dodawany do obiektu DataTable. Zamiast tego występuje zdarzenie FillError, które pozwala określić, czy dojdzie do utraty precyzji, i odpowiednio zareagować. Aby uzyskać więcej informacji na temat zdarzenia FillError, zobacz Obsługa zdarzeń DataAdapter. Aby uzyskać wartość programu SQL Server decimal , możesz również użyć SqlDataReader obiektu i wywołać metodę GetSqlDecimal .
ADO.NET obejmuje również rozszerzoną obsługę System.Data.SqlTypes w DataSet. Aby uzyskać więcej informacji, zobacz SqlTypes i DataSet.
Zobacz także
- Adaptery danych i Czytniki danych
- Mapowania typów danych w ADO.NET
- Wiele aktywnych zestawów wyników (MARS)
- Microsoft ADO.NET dla programu SQL Server