сколько не читал мсдн так и не понял зачем при заполнении datagridview прописывать еще и SqlDataAdapter а DataTable недостаточно? Может вопрос глупый но я хочу понять а не просто писать код, что бы работало.
Ответ
Для начала обратимся к документации. Ссылки привожу на русские страницы, но перевод там автоматический, и мне не нравится, поэтому цитата будет оригинальная.
SqlDataReader
Provides a way of reading a forward-only stream of rows from a SQL Server database.
SqlDataAdapter
Represents a set of data commands and a database connection that are used to fill the DataSet and update a SQL Server database.
По сути оба класса предоставляют доступ к данным БД, но немного по-разному.
SqlDataReader предоставляет строго последовательный доступ и читает данные небольшими порциями, что позволяет работать даже с огромными таблицами без риска получить исключение по таймауту. Но на этом его достоинства заканчиваются, больше он ничего не умеет.
SqlDataAdapter предоставляет богатый интерфейс для автоматического заполнения DataTable и DataSet, а также предоставляет средства синхронизации данных между DataSet и БД, но при этом, на практике, довольно капризно относится к слишком большим наборам данных, т.к. пытается получить их целиком. Если набор данных превышает некоторый объем (зависит от настроек соединения, задержек в сети, загруженности сервера и т.д.) то адаптеру не хватит времени на его получение и будет выброшено исключение.
Универсального рецепта что использовать тут нет, так же как при работе с файлами. Где-то выгоднее использовать ридер, где-то адаптер.
DataTable и DataSet, согласно документации и практическому применению, представляют кэш данных БД в памяти клиента. DataSet состоит из набора DataTable и дополнительно может содержать подробности реляционной модели
кэшированных данных.
DataTable, в частности, может использоваться как DataSource для контролов вроде GridView, ListView и д.р. предназначенных для отображения массивов данных.
Комментариев нет:
Отправить комментарий