Лабораторная работа № 20
Работа с базами данных
с использованием LINQ to SQL
Время выполнения работы – 4 часа
Цель работы
Ознакомление с основой разработки Windows-приложений на языке C# для работы с базами данных на основе технологии ADO.NET.
Техническое обеспечение
2.1 Персональная ЭВМ IBM Pentium IV и более поздних моделей c оперативной памятью не менее 512 Мбайт.
2.2 Клавиатура.
2.3 Дисплей.
2.4 Манипулятор типа “мышь”.
Программное обеспечение
3.1 Операционная система Windows XP SP 3 более поздние версии Windows.
3.2 Система программирования Microsoft Visual Studio 2008 и более поздние версии.
Постановка задачи
Разработать Windows-приложение для однотабличной базы данных для СУБД Microsoft SQL Server, реализованной согласно варианта задания, которые приведены в методических указаниях по лабораторной работе № 19.
Предусмотреть для данной базы данных добавление и удаление записей, фильтрацию записей, вывод отдельных записей и всей базы данных на экран, упорядочивание записей по значению одного из полей с помощью хранимой процедуры, вставку записей с использованием транзакций, выяснение доступности соединения с базой данных.
Доступ к базе данных с помощью LINQ to SQL
Полное описание о доступе к базам данных с помощью LINQ to SQL изложено в файле LINQ to SQL.doc.
В приведенном ниже примере вначале создается база данных городов, содержащая два поля: название города и численность его населения. Затем организуем доступ к этой базе данных с помощью LINQ to SQL и создадим запрос на извлечение коллекции городов, численность населения которых превышает миллион жителей.
Вначале запустим Visual Studio 2010 и выберем проект шаблона Windows Forms Application, укажем имя Name — LinqToSqlГopoдa. Далее, попав в конструктор формы, из панели элементов Toolbox (Панель элементов) перетащим элемент управления для отображения и редактирования табличных данных DataGridView, на этот элемент в конечном итоге будет попадать результат запроса.
|
Теперь создадим базу данных SQL Server. Для этого в меню Project (Проект) выберем команду Add New Item (Добавить новый элемент). В появившемся окне выберем элемент База данных, основанная на службах, а в поле Name укажем имя базы данных Города.mdf Далее в окне мастера настройки источника данных зададим тип модели базы данных — Набор данных. Затем согласимся на сохранение строки подключения в файле конфигурации приложения. Теперь после щелчка на кнопке Готово будет создан пустой набор данных. Этот набор данных Города.mdf теперь будет виден в окне Solution Explorer (Обозреватель решений).
Чтобы заполнить этот набор данных, дважды щелкнем мышью по значку Горо- да.mdf; таким образом, мы попадаем в окно Server Explorer/Database Explorer (Обозреватель серверов/Обозреватель баз данных). Здесь в контекстном меню узла Таблицы выберем команду Добавить новую таблицу. В результате мы попадаем уже в другое окно — dbo.Tablel, где зададим имена двух столбцов: Город и Население (рис. 20.1).
Рисунок 20.1 – Заказ полей таблицы в базе данных
При сохранении (<Ctrl>+<S>) пустой таблицы появится запрос на выбор имени для таблицы, здесь мы зададим имя Города.
Теперь будем заполнять сформированную таблицу. Для этого в Обозревателе серверов щелкнем правой кнопкой мыши на узле Города (имя нашей таблицы) и в появившемся контекстном меню выберем команду Показать таблицу данных. Теперь в окне Города мы имеем возможность заполнять нашу таблицу (рис. 20.2).
|
На этом этапе задача создания базы данных и заполнения в ней таблицы городов выполнена. Приступаем к организации запроса к таблице городов. Как уже указывалось ранее, LINQ-запрос можно построить через набор данных DataSet, а можно LINQ-запрос организовать с помощью классов LINQ to SQL. Эти классы сопоставляются с таблицами и представлениями базы данных и называются классами сущностей DataContext. Класс сущности сопоставляется с записью, а отдельные свойства класса сущности сопоставляются с отдельными столбцами, образующими запись. Сказанное, вероятно, звучит запутанно, но практически сводится к перетаскиванию мышью созданной нами таблицы Города из окна Server Explorer/ Database Explorer (Обозреватель серверов/Обозреватель баз данных) на’так называемый Object Relational Designer (реляционный конструктор объектов). В результате получим класс сущностей именно для нашей таблицы Города, наследованный от базового класса DataContext, и в тексте нашей программы уже легко сможем строить LINQ-запросы, обращаясь к объекту класса сущностей.
Чтобы получить в нашем проекте реляционный конструктор объектов, в меню Project выберем команду Add New Item (Добавить новый элемент), а в появившемся одноименном окне — шаблон (элемент) LINQ to SQL Classes (классы LINQ to SQL). В поле Name укажем имя файла Сущности.dbml и щелкнем на кнопке Add. Внешний вид реляционного конструктора объектов можно увидеть на рис. 20.3
Теперь, как мы уже говорили, просто перетаскиваем мышью таблицу Города из окна Server Explorer/Database Explorer (Обозреватель серверов/Обозреватель баз данных) на реляционный конструктор объектов. Реляционный конструктор объектов создает классы и применяет специфические для LINQ to SQL атрибуты, чтобы иметь функциональные возможности LINQ to SQL (возможности передачи данных и редактирования, какие имеются у DataContext). А нам остается всего лишь на вкладке программного кода ввести текст, представленный в листинге 20.1.
|
Рисунок 20.2 – Заполнение таблицы городов в базе данных
Рисунок 20.3 – Добавление в проект реляционного конструктора объектов