Высокоуровневые методы информатики и программирования Лекция 29 Типизированные классы Dataset
Типизированный класс DataSet
Виды классов DataSet Не типизированные (Untyped Dataset ) –Экземпляры класса DataSet –Можно получать таблицы только по индексу в коллекции –Можно получать поля только по индексу в коллекции Типизированные (Typed Dataset) –Экземпляры класса производного от DataSet –Можно работать с таблицами по их названию (методы) –Можно работать с полями по их названию. –Можно создавать с помощью Data Source Designer
Типизированный data set это набор классов, которые создается декларативно с помощью дизайнера Visual Studio. Данные классы являются производными от классов DataSet, DataTable и DataRow ADO.NET и содержат типизированное (безопасное по типу) API (набор свойств) для получения доступа к данным, которые содержатся в DataSet, имеющем конкретную схему (набор таблиц и отношений). Типизированный data set можно создать в Visual Studio с помощью операции перетаскивания (drag and drop) и с помощью задания свойств в окне Properties. При проектировании типизированного data set создается файл описания схемы XML (XML Schema Definition, XSD), содержащий схему данных, которые будут сохраняться в DataSet. Файл XSD также содержит аннотации, которые связаны с источником данных, из которого он будет генерироваться. Затем Visual Studio использует файл XSD для создания программного файла, который содержит описание типизированных классов data set.
Виды классов DataSet Нетипизированный класс DataSet // salesData – объект DataSet DataTable companyTable = salesData.Tables["Company"]; // обращение к элементу "columnName" записи index salesData.Rows [index]["columnName"] Типизированный класс DataSet (объект vendorData) DataTable companyTable = vendorData.Company; companyTable.Rows[index].columnName
Типизированный класс DataSet В данном классе для каждой таблицы создаются подклассы –Имя класса типизированных таблиц. DataTable Свойства Column Индексатор this[int] возвращает типизированную строку (объект Row) New Row() Add Row –( Row) –(список значений полей) –класс типизированных строк. Row Свойства Get Rows()
Схема типизированного DataSet DataSet (базовый класс) DataTable Customers Типизированный DataSet Customers Orders CustomersRow DataTable Orders DataTable OrderDetails OrdersRow OrderDetails OrdersDetailsRow Типизированныt DataAdapters DataAdapter CustomersDataAdapter OrdersDataAdapter OrdersDetailsDataAdapter
Создание типизированного DataSet с помощью меню В меню Visual Studio 2008 Data Source есть пункт Data для создания и работы с типизированными DataSet. Для создания типизированного DataSet нужно выбрать команду Add New Data Source При создании источника данных в Visual Studio 2008, создаются: Класс типизированного объектов DataSet (с типизированными DataTable и DataRow). Класс типизированных объектов DataAdapter.
Пример типизированных DataSet Доступ к данным в обычном DataSet Доступ к данным в типизированном DataSet DataSet ds = new DataSet("PersonContacts"); DataTable personTable = new DataTable("Person");... ds.Tables.Add(personTable); DataRow person = personTable.NewRow(); personTable.Rows.Add(person); person["Name"] = "Beer";... person.GetChildRows("PersonHasContacts")[0]["Name"] = "Beer"; PersonContacts typedDS = new PersonContacts(); PersonTable personTable = typedDS.Person; Person person = personTable.NewPersonRow(); personTable.AddPersonRow(person); person.Name = "Beer";... person.GetContactRows()[0].Name = "Beer";
Дочерние классы В типизированный класс DataSet включены дочерние классы –типизированных таблиц; –типизированных строк. Для указания класса типизированной таблицы нужно указывать имя DataSet, к которому она относится. DataTable –Например: MyDS.CustomersDataTable; Классы типизированных записей также включены в класс типизированного Dataset. Row –Например: MyDS.CustomersDataRow
Описание типизированного класса DataSet namespace AppDataSet { public partial class NorthwndDS : global::System.Data.DataSet { private CustomersDataTable tableCustomers; private Order_DetailsDataTable tableOrder_Details; private OrdersDataTable tableOrders; private CustomersDataTable tableCustomers; private EmployeesDataTable tableEmployees;... public partial class CustomersDataTable : DataTable, IEnumerable {... } public partial class EmployeesDataTable : DataTable, IEnumerable { … }... public partial class CustomersRow : DataRow {...} public partial class CustomersRow : DataRow {...}... }
Пространство имен с описаниями классов для типизированных DataAdapter namespace. TableAdapters namespace AppDataSet.NorthwndDSTableAdapters {... // описание класса для TableAdapter public partial class CustomersTableAdapter : Component {... }... }
Использование типизированного объекта TableAdapter Подключение пространства имен using. TableAdapters; Создаем объект, куда заносить данные –Типизированный DataSet. Например: NorthwndDS ds = new NorthwndDS(); –Типизированную таблицу. Например: NorthwndDS.EmployeesDataTable etbl = new NorthwndDS.EmployeesDataTable(); Создаем типизированный адаптер. Например: EmployeesTableAdapter etda = new EmployeesTableAdapter(); Выполняем занесение данных в объект –В таблицу типизированного DataSet etda.Fill(ds.Employees); –В типизированную таблицу etda.Fill(etlb); Подключаем объект к элементу управления –К типизированному DataSet dgv.DataSource = ds; dgv.DataMember = "Employees"; –К типизированной таблице dgv.DataSource = etbl;
Пример заполнения типизированного DataSet using DSsample.NorthwindTableAdapters; // добавлено новое пространство имен... // создаем экземпляр типизированного DataSet в классе Form NorthwndDS ds = new NorthwndDS(); private void Form1_Load(object sender, EventArgs e) { // создаем нужный типизированный адаптер EmployeesTableAdapter eta = new EmployeesTableAdapter(); // заполняем таблицу в DataSet eta.Fill(ds.Employees); // назначаем таблицу элементу управления dgv.DataSource = ds; dgv.DataMember = "Employees"; ds.Employees.get }
Настройка типизированных адаптеров Адаптер позволяет заполнить типизированные таблицы и сохранить изменения в БД. Для адаптера можно создать несколько запросов. Например: –Запрос без параметров для загрузки всех записей –Запросы с параметрами, которые задают условия выбора записей из БД. Для адаптеров можно создать разные методы. Например: –Fill(), которые заносят данные в типизированные таблицы. –Get(), которые возвращают созданную таблицу в качестве результата работы.
Добавление запросов к адаптеру
Создание типизированного адаптера и таблицы DataTable Мастер конфигурирования TableAdapter
Задание запроса вручную
Построение запроса с помощью Query Builder
Генерирование других команд TableAdapter Advance options
Запрос с параметром
Выбор имен для методов TableAdapter
Проверка метода