Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ADO как базовый объект доступа.doc
Скачиваний:
16
Добавлен:
15.12.2018
Размер:
1.48 Mб
Скачать

1.4. Адаптер данных (объект DataAdapter)

Объект DataAdapter — один из важнейших элементов ADO.NET. Этот объект является посредником между источником данных и набором данных DataSet. В приложениях DataAdapter обеспечивает считывание информации их базы данных и пересылку ее в DataSet, возврат изменений, сделанных пользователем, в исходную базу данных. Объект DataAdapter может работать не только с базами данных, он способен связать объект DataSet с любым источником и набором данных.

Вообще, DataAdapter является объектом с перестраиваемой конфигурацией, что позволяет разработчикам задавать, откуда и какую информацию перемещать в объект DataSet и из него. Задача перемещения данных решается через использование команд на основе SQL-запросов или хранимых процедур. В Visual Studio имеется два типа адаптера данных:

  • Объект OleDbDataAdapter, который используется для работы с любым источником данных, доступных через OLE DB-провайдера;

  • Объект SqlDataAdapter, который используется для работы с данными, хранящимися в SQL Server версии 7.0 и выше. Поскольку SqlDataAdapter оптимизирован для работы именно с этим источником данных, то он работает с ним более эффективно и быстрее чем

OieDbDataAdapter.

Вы можете создать и управлять адаптерами, используя части .NET Framework, указанные на рис. 1.8.

Каждый объект DataAdapter обеспечивает обмен данными между одной таблицей источника данных (базы данных) и одним объектом DataTable в наборе данных DataSet. Если DataSet сдержит несколько таблиц (объектов DataTable), то необходимо иметь и несколько адаптеров данных (рис. 1.9).

Когда требуется заполнить данными таблицу в DataSet, вызывается соответствующий метод (Fill) объекта DataAdapter, который по сути дела выполняет SQL-запрос или хранимую процедуру. Также DataAdapter создает объект чтения данных (OleDbDataReader или SqlDataReader), чтобы считать данные из источника в DataSet. Точно так же, когда необходимо модифицировать базу данных, вызывается соответствующий метод (Update) объекта DataAdapter, который вызывает на исполнение соответствующий SQL-запрос или хранимую процедуру (рис. 1.9). В результате этого все изменения, внесенные пользователем в таблицы набора данных, будут возвращены в соответствующие таблицы базы данных.

1.4.1. Адаптеры данных и связанные таблицы

Несмотря на то, что в объекте DataSet может быть несколько связанных таблиц, DataAdapter не имеет в SQL-запросах или хранимых процедурах команд (параметров), отражающих эти реляционные связи. Да это и физически невозможно — ведь, как мы уже раньше отмечали, DataAdapter работает только с одной таблицей в базе данных и с одной таблицей в наборе данных DataSet. Для создания и хранения реляционных связей в DataSet используется другой объект — DataRelation. Кроме возможности создавать и хранить реляционные связи данный объект позволяет управлять ограничениями на работу с таблицами набора данных (например, реализовать каскадное обновление или удаление), а также обеспечивает навигацию в дочерней таблице при перемещении по записям в родительской таблице.

Например, представьте, что вам нужно получить данные из двух связанных таблиц базы данных Northwind: Customers и Orders ("Клиенты" и "Заказы") и показать их в одном объекте DataGrid. Раньше для этого понадобилось бы выполнить объединение этих двух таблиц в одну, например, с использованием оператора join в SQL-запросе, чтобы получить единственный набор записей Recordset и затем его связать с DataGrid. Теперь достаточно определить два объекта DataAdapter: один, чтобы заполнить таблицу customers ("Клиенты") в DataSet и второй, чтобы заполнить таблицу Orders ("Заказы"). В DataSet с использованием объекта DataRelation можно указать, что записи таблицы orders связаны с записями таблицы customers полем customeriD, после чего связать DataSet с объектом DataGrid. Теперь, имея заполненный объект DataSet и отключившись от исходной базы данных, вы по своему желанию можете работать как с каждой таблицей отдельно, так и, вызвав необходимые свойства и методы объекта DataRelation, со связанной парой таблиц. Этого в принципе невозможно было сделать с объектом Recordset, так как он заполнялся информацией из уже объединенного набора записей. Такая возможность является неоспоримым преимуществом

объекта DataSet над объектом Recordset.

Объекту DataAdapter для работы нужно иметь открытое соединение с источником данных, чтобы читать и записывать информацию. Поэтому DataAdapter использует объекты OleDbConnection или SqlConnection, чтобы связаться с источником данных. DataAdapter может одновременно поддерживать до четырех открытых соединений, по одному для каждого типа действия, которое он может выполнить: select, update, insert и delete. Объект OleDbConnection обеспечивает соединение с любым источником данных OLE DB-провайдера. Объект SqlConnection обеспечивает соединение с SQL Server 7.0 и выше. В обоих случаях, объект Connection представляет уникальный сеанс соединения с источником данных.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]