Класс DbDataAdapter

Класс DbDataAdapter – это своеобразный мост между реляционной БД и отсоединенными объектами модели ADO.NET.

Взаимодействие клиентского приложения с БД возможно с помощью ранее описанных классов DbCommand и, если запрос возвращает значения, DbDataReader. При работе с этими классами каждая команда обработки данных клиентского приложения вызывает обращение к ЛИНТЕР-серверу.

Например, при добавлении в БД 100000 записей с помощью метода DbCommand будет выполнено 100000 обращений к ЛИНТЕР-серверу, т.к. записи добавляются по одной. При этом соединение с БД должно быть всегда открыто. Такой уровень взаимодействия с СУБД в ADO.NET называется связным. Во многих случаях этот уровень не является оптимальным с точки зрения производительности.

Альтернативный уровень взаимодействия с СУБД, называемый несвязный, предоставляет класс DbDataAdapter.

В отличие от связного уровня, данные, полученные с помощью адаптера данных, не обрабатываются с помощью объекта чтения данных. Вместо этого для обмена данными между клиентским приложением и ЛИНТЕР-сервером используется так называемый отсоединенный объект DataSet. DataSet – это контейнер, используемый для любого числа объектов DataTable, каждый из которых содержит коллекцию объектов DataRow и DataColumn.

Т.е. с помощью класса DbDataAdapter данные, извлеченные из БД, помещаются в объект DataSet и становятся доступными клиентскому приложению, и наоборот, кэшированные в DataSet обновления передаются в БД.

Класс DbDataAdapter устанавливает соединение с ЛИНТЕР-сервером автоматически и сохраняют его открытым на минимально необходимое время. Как только клиентское приложение получает запрошенные данные (т.е. объект DataSet), соединение с ЛИНТЕР-сервером разрывается. Клиентское приложение работает с локальной копией загруженных с БД ЛИНТЕР-сервера данных в автономном режиме, без взаимодействия с ЛИНТЕР-сервером. Оно может вставлять, удалять и модифицировать данные DataTable, но физически БД не будет обновлена до тех пор, пока клиентское приложение не передаст явно объект DataSet адаптеру данных для обновления.

Конструкторы класса DbDataAdapter приведены в таблице 26.

Таблица 26. Конструкторы класса DbDataAdapter
Конструктор Описание
LinterDbDataAdapter() Создает новый объект LinterDbDataAdapter со свойствами по умолчанию.
LinterDbDataAdapter(LinterDbCommand) Создает новый объект LinterDbDataAdapter с заданным SQL-оператором.
LinterDbDataAdapter(String, LinterDbConnection) Создает новый объект LinterDbDataAdapter с заданным SQL-оператором для указанного соединения с источником данных.
LinterDbDataAdapter(String, String) Создает новый объект LinterDbDataAdapter с заданными SQL-оператором и строкой подключения к источнику данных.

Свойства класса DbDataAdapter приведены в таблице 27.

Таблица 27. Свойства класса DbDataAdapter
Свойство Описание
AcceptChangesDuringFill Предоставляет/устанавливает признак необходимости вызова метода AcceptChanges при добавлении новой строки в DataTable при выполнении любой из операций методом Fill.
AcceptChangesDuringUpdate Предоставляет/устанавливает признак необходимости вызова метода AcceptChanges при модификации строки с помощью метода Update().
ContinueUpdateOnError Предоставляет/устанавливает признак необходимости генерировать исключение при обнаружении ошибки во время обновления строки.
DeleteCommand Предоставляет/устанавливает текст SQL-оператора, используемого для удаления записей из источника данных.
FillLoadOption Предоставляет/устанавливает значение перечисления типа LoadOption, определяющее, как адаптер заполняет объект DataTable из объекта DbDataReader.
InsertCommand Предоставляет/устанавливает текст SQL-оператора, используемого для добавления записей в источник данных.
MissingMappingAction Предоставляет/устанавливает реакцию объекта DbDataAdapter в ситуации, когда загружаемые таблицы (или столбцы) отсутствуют в коллекции TableMappings объекта DataSet.
MissingSchemaAction Предоставляет или устанавливает реакцию объекта DbDataAdapter в ситуации, когда схема загружаемых данных не соответствует схеме в текущем объекте DataSet.
ReturnProviderSpecificTypes Предоставляет/устанавливает тип данных, возвращаемых ADO.NET-провайдером при выполнении метода Fill.
SelectCommand Предоставляет/устанавливает текст SQL-оператора, используемого для выборки данных в источнике данных.
TableMappings Предоставляет коллекцию столбцов таблицы из источника данных, используемую для сопоставления со столбцами соответствующего объекта DataTable.
UpdateBatchSize Задает/отменяет режим пакетного обновления записей и предоставляет/устанавливает размерность пакета обновлений.
UpdateCommand Предоставляет/устанавливает текст SQL-оператора, используемого для обновления записей в источнике данных.

Методы класса DbDataAdapter приведены в таблице 28.

Таблица 28. Методы класса DbDataAdapter
Метод Описание
Fill(DataSet) Добавляет/обновляет строки в объекте DataSet.
Fill(DataTable) Добавляет/обновляет строки в объекте DataTable.
Fill(DataSet, String) Добавляет/обновляет строки в указанной таблице объекта DataSet для получения соответствия строкам, полученный из источника данных.
Fill(Int32, Int32, DataTable) Добавляет/обновляет строки в объекте DataTable из указанной части таблицы в источнике данных.
Fill(DataSet, Int32, Int32, String) Добавляет/обновляет строки в объекте DataSet из указанной части таблицы в источнике данных.
FillSchema(DataSet, SchemaType, String) Настраивает схему объекта DataSet в соответствие со схемой в источнике данных.
FillSchema(DataSet, SchemaType) Добавляет объект DataTable с именем "Table" в объект DataSet и настраивает его схему в соответствии с источником данных.
FillSchema(DataTable, SchemaType) Настраивает схему данных для указанного объекта DataTable.
GetFillParameters Предоставляет информацию о параметрах параметризованного SELECT-оператора в виде массива объектов IDataParameter.
Update(DataRow[]) Выполняет необходимые операторы (INSERT, UPDATE или DELETE) для изменения строк в указанном массиве объектов DataRow.
Update(DataSet) Выполняет необходимые операторы (INSERT, UPDATE или DELETE) для изменения строк в первой таблице объекта DataSet.
Update(DataTable) Выполняет необходимые операторы (INSERT, UPDATE или DELETE) для изменения строк в указанном объекте DataTable.
Update(DataSet, String) Выполняет необходимые операторы (INSERT, UPDATE или DELETE) для изменения строк в указанной таблице объекта DataSet.

События класса DbDataAdapter приведены в таблице 29.

Таблица 29. События класса DbDataAdapter
Событие Описание
FillError Генерируется при возникновении ошибки в методе Fill.
RowUpdating Генерируется перед обновлением любой строки из DataSet в источнике данных.
RowUpdated Генерируется после обновления в источнике данных строки из DataSet.