Co częściej stosuje się w praktyce? Odczyt danych za pomocą klas dziedziczących z DbDataReader czy DbDataSet?
Co częściej stosuje się w praktyce? Odczyt danych za pomocą klas dziedziczących z DbDataReader czy DbDataSet?
DataReader to model połączeniowy i jest ściśle związany z konkretnym źródłem danych. DataReader pozwala na jednokierunkowy odczyt danych. Chcąc manipulować danymi, należałoby połączyć się ze źródłem danych i po raz kolejny przesłać zapytanie.
DataSet to model bezpołączeniowy i pełni rolę bazy danych w pamięci. Nie jest związany ze źródłem danych. Mogę np. utworzyć DataSet bez bazy danych. Jest bardziej elastyczny i daje większe możliwości manipulacji danymi. Przy jednym połączeniu z bazą mogę przesłać wiele zapytań SQL , dzięki czemu dostaję Kolekcję tabel, na bazie których mogę tworzyć relacje. Przy manipulacji danymi przychodzi z pomocą również LINQ to DataSet.
Często za wyborem DataSet przemawia serializacja do XML. DataReader musi być połączony z bazą, dlatego nie może być serializowany.
Reasumując. Jeśli moim zadaniem jest pobranie i wyświetlenie bardzo dużej ilości danych, lepszym rozwiązaniem jest DataReader. Jeśli pobieram dane, na których muszę dokonywać skomplikowanych operacji, wybór pada na DataSet.
Proponuję zainteresować się technologią Entity Framework. Programista może posługiwać się czystymi klasami modelu danych (np. Customer, Product), a zapytania pisać bezpośrednio w kodzie za pomocą Linq To Entities. Wyrażenia Linq automatycznie tłumaczone są na polecenia SQL.