Лекция 29. Типизированные классы Dataset.

advertisement
Высокоуровневые методы
информатики и
программирования
Лекция 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
• В данном классе для каждой таблицы
создаются подклассы
– Имя класса типизированных таблиц
<имя DataSet>.<имя таблицы>DataTable
• Свойства <Поле>Column
• Индексатор this[int] возвращает типизированную строку
(объект <имя таблицы>Row)
• New<имя таблицы>Row()
• Add<имя таблицы>Row
– (<имя таблицы>Row)
– (список значений полей)
– класс типизированных строк
<имя DataSet>.<имя таблицы>Row
• Свойства <Поля>
• Get<имя таблицы>Rows()
Схема типизированного DataSet
Типизированный DataSet
Customers
CustomersRow
DataSet (базовый класс)
DataTable “Customers”
DataTable “Orders”
Orders
OrdersRow
DataTable “OrderDetails”
OrderDetails
OrdersDetailsRow
Типизированныt DataAdapters
CustomersDataAdapter
DataAdapter
DataAdapter
OrdersDataAdapter
OrdersDetailsDataAdapter
DataAdapter
Создание типизированного DataSet с
помощью меню
• В меню Visual Studio 2008 Data Source есть пункт Data для создания и
работы с типизированными DataSet.
• Для создания типизированного DataSet нужно выбрать команду
Add New Data Source
•При создании источника данных в Visual Studio 2008 , создаются:
• Класс типизированного объектов DataSet (с типизированными
DataTable и DataRow).
• Класс типизированных объектов DataAdapter.
Пример типизированных 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";
• Доступ к данным в типизированном DataSet
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, к которому она
относится
<имя DS>.<имя таблицы>DataTable
– Например: MyDS.CustomersDataTable;
• Классы типизированных записей также
включены в класс типизированного Dataset
<имя 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 <имя проекта>.<имя DS>TableAdapters
namespace AppDataSet.NorthwndDSTableAdapters
{
...
// описание класса для TableAdapter
public partial class CustomersTableAdapter : Component
{ ... }
...
}
Использование типизированного объекта
TableAdapter
•
Подключение пространства имен
•
Создаем объект, куда заносить данные
using <имя проекта>.<имя DS>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
Проверка метода
Download