Зачем нужен обьект SqlDataAdapter

316
09 апреля 2017, 00:18

сколько не читал мсдн так и не понял зачем при заполнении datagridview прописывать еще и SqlDataAdapter а DataTable недостаточно? Может вопрос глупый но я хочу понять а не просто писать код, что бы работало.

Answer 1

Для начала обратимся к документации. Ссылки привожу на русские страницы, но перевод там автоматический, и мне не нравится, поэтому цитата будет оригинальная.

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 и д.р. предназначенных для отображения массивов данных.

READ ALSO
VS Code перестал компилировать программы на C#

VS Code перестал компилировать программы на C#

После мартовского обновления VSCode и обновления dotnet пакета, если пытаюсь запустить программу через терминал командой dotnet run, получаю ошибку:

312
Выбрать все строки из столбца DataTable

Выбрать все строки из столбца DataTable

ПриветствуюУ меня на форме есть DataGridView заполненный таблицей из БД

460
Зачем тут тип dynamic?

Зачем тут тип dynamic?

В C# можно создавать счетчик итераций типа dynamic

270
Убрать Смещение StackPanel

Убрать Смещение StackPanel

До начала ввода текста

279