Доступ к базе данных с помощью LINQ to SQL 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Доступ к базе данных с помощью LINQ to SQL



В данном примере вначале создадим базу данных городов, содержащую два поля: название города и численность его населения. Затем организуем доступ к этой базе данных с помощью LINQ to SQL и создадим запрос на извлечение кол­лекции городов, численность населения в которых превышает миллион жителей. Эту задачу можно было бы решить, организовав LINQ-запрос через набор данных Dataset, как мы это делали в предыдущем разделе, однако мы хотим продемонст­рировать и другой подход.

Вначале запустим 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.Table1, где зададим имена двух столбцов: Город и Насе­ление (рис. 19.14).

Рисунок 19.14 - Заказ полей таблицы в базе данных

При сохранении (<Ctrl>+<S>) пустой таблицы появится запрос на выбор имени для таблицы, здесь мы зададим имя Города.

Теперь будем заполнять сформированную таблицу. Для этого в Обозревателе серверов щелкнем правой кнопкой мыши на узле Города (имя нашей таблицы) и в появившемся контекстном меню выберем команду Показать таблицу данных. Теперь в окне Города мы имеем возможность заполнять нашу таблицу (рис. 19.15).

На этом этапе задача создания базы данных и заполнения в ней таблицы горо­дов выполнена. Приступаем к организации запроса к таблице городов. Как уже указывалось ранее, LINQ-запрос можно построить через набор данных DataSet, а можно LINQ-запрос организовать с помощью классов LINQ to SQL. Эти классы сопоставляются с таблицами и представлениями базы данных и называются клас­сами сущностей DataContext. Класс сущности сопоставляется с записью, а от­дельные свойства класса сущности сопоставляются с отдельными столбцами, обра­зующими запись. Сказанное, вероятно, звучит запутанно, но практически сводится к перетаскиванию мышью созданной нами таблицы Города из окна Server Explorer/ Database Explorer (Обозреватель серверов/Обозреватель баз данных) на’так назы­ваемый Object Relational Designer (реляционный конструктор объектов). В резуль­тате получим класс сущностей именно для нашей таблицы Города, наследованный от базового класса DataContext, и в тексте нашей программы уже легко сможем строить LINQ-запросы, обращаясь к объекту класса сущностей.

Чтобы получить в нашем проекте реляционный конструктор объектов, в меню Project выберем команду Add New Item (Добавить новый элемент), а в появив­шемся одноименном окне — шаблон (элемент) LINQ to SQL Classes. В поле Name укажем имя файла Сущности.dbml и щелкнем на кнопке Add. Внешний вид реля­ционного конструктора объектов можно увидеть на рис. 19.16.

Теперь, как мы уже говорили, просто перетаскиваем мышью таблицу Города из окна Server Explorer/Database Explorer (Обозреватель серверов/Обозреватель баз данных) на реляционный конструктор объектов. Реляционный конструктор объек­тов создает классы и применяет специфические для LINQ to SQL атрибуты, чтобы иметь функциональные возможности LINQ to SQL (возможности передачи данных и редактирования, какие имеются у DataContext). А нам остается всего лишь на вкладке программного кода ввести текст, представленный в листинге 19.10.

Рисунок 19.15 - Заполнение таблицы городов в базе данных

 

Рисунок 19.16 - Добавление в проект реляционного конструктора объектов

 

 

Листинг 19.10. Организация LINQ-запроса к базе данных

// Данное Windows-приложение состоит из экранной формы и элемента управления

// DataGridView. В программе организован LINQ-запрос к базе данных городов с

// помощью базового класса сущностей DataContext. Для этого в данную программу

// добавлен (Project | Add New Item) элемент (шаблон) "Классы LINQ to SQL",

// Name=Сущности.dbml. После связывания таблицы "Города" из базы данных с базовым

// классом сущностей (путем перетаскивания мышью таблицы из окна Explorer/Database

// Explorer в окно конструктора Object Relational Designer) автоматически был

// создан класс СущностиDataContext, производный (наследованный) от базоваго класса

// DataContext. Используя этот класс в данной программе организован LINQ-запрос к

// базе данных на получение коллекции (списка) городов, численность населения в

// которых превышает миллион жителей. Результат запроса выведен на элемент

// управления DataGridView.

using System;

using System.Linq;

using System.Windows.Forms;

// Другие директивы using удалены, поскольку они не используются в данной программе

namespace LinqToSqlГорода

{

public partial class Form1: Form

{

// С помощью объекта базового класса DataContext будем иметь доступ к

// таблице базы данных:

private СущностиDataContext БД = new СущностиDataContext();

//private ГородаDataSet

public Form1()

{

InitializeComponent();

// В результате запроса получаем коллекцию записей из таблицы базы

// данных, удовлетворяющей условию where:

var ГородаМлн = from города in БД.Города

where Convert.ToInt32(города.Население) > 1000000

select города;

// или select new { города.Город, города.Население };

// Результат запроса выводим на элемент управления DataGridView,

// отображающий табличные данные:

dataGridView1.DataSource = ГородаМлн;

}

}

}

Фрагмент работы программы показан на рис. 19.17.

Рисунок 19.17 - Запрос к базе данных на города-миллионеры

Убедиться в работоспособности программы можно, открыв решение LinqToSqlTopofla.sln папки LinqToSqlГорода.

Задания

1. Счет в банке представляет собой структуру с полями: номер счета, код счета, фамилия владельца, сумма на счете, дата открытия счета, годовой процент на­числения. Поиск по номеру счета, дате открытия и владельцу.

2. Запись о товаре на складе представляет собой структуру с полями: номер склада, код товара, наименование товара, дата поступления на склад, срок хранения в днях, количество единиц товара, цена за единицу товара. Поиск по номеру склада, коду товара, дате поступления и сроку хранения (просро­ченные и не просроченные товары).

3. Запись о преподаваемой дисциплине представляется структурой: код дисцип­лины в учебном плане, наименование дисциплины, фамилия преподавателя, код группы, количество студентов в группе, количество часов лекций, коли­чество часов практики, наличие курсовой работы, вид итогового контроля (зачет или экзамен). Зачет 0,35 ч на одного студента; экзамен — 0,5 ч на студента. Поиск осуществлять по фамилии преподавателя, коду группы, на­личию курсовой, виду итогового контроля.

4. Информационная запись о книге, выданной на руки абоненту, представляет собой структуру следующего вида: номер читательского билета, фамилия абонента, дата выдачи, срок возврата (количество дней), автор, название, год издания, издательство, цена. Поиск по полям: номер читательского билета, автор, издательство, дата возврата (просроченные).

5. Информационная запись о файле содержит поля: каталог, имя файла, расши­рение, дата и время создания, атрибуты «только чтение», «скрытый», «сис­темный», признак удаления, количество выделенных секторов (размер секто­ра принять равным 512 байт). Поиск выполнять по каталогу, дате создания, по признаку удаления.

6. Разовый платеж за телефонный разговор является структурой с полями: фа­милия плательщика, номер телефона, дата разговора, тариф за минуту разго­вора, скидка (в процентах), время начала разговора, время окончания разго­вора. Поиск по фамилии, дате разговора, номеру телефона.

7. Модель компьютера характеризуется кодом и названием марки компьютера, типом процессора, частотой работы процессора, объемом оперативной памя­ти, объемом жесткого диска, объемом памяти видеокарты, стоимостью компь­ютера в условных единицах и количеством экземпляров, имеющихся в нали­чии. Поиск по типу процессора, объему ОЗУ, памяти видеокарты и жесткого диска.

8. Список абонентов сети кабельного телевидения состоит из элементов сле­дующей структуры: фамилия, район, адрес, телефон, номер договора, дата за­ключения договора, оплата установки, абонентская плата помесячно, дата по­следнего платежа. Поиск по фамилии, району, дате заключения договора, дате последнего платежа.

9. Сотрудник представлен структурой Person с полями: табельный номер, номер отдела, фамилия, оклад, дата поступления на работу, процент надбавки, подо­ходный налог, количество отработанных дней в месяце, количество рабочих дней в месяце, начислено, удержано. Поиск по номеру отдела, полу, дате по­ступления, фамилии.

10. Запись о багаже пассажира авиарейса содержит следующие поля: номер рей­са, дата и время вылета, пункт назначения, фамилия пассажира, количество мест багажа, суммарный вес багажа. Поиск выполнять по номеру рейса, дате вылета, пункту назначения, весу багажа (превышение максимально допусти­мого).

11. Одна учетная запись посещения спорткомплекса имеет структуру: фамилия клиента, код и вид спортивного занятия, фамилия тренера, дата и время нача­ла, количество минут, тариф за минуту. Поиск по фамилии клиента и трене­ра, по виду занятия, по дате начала, по количеству минут (больше или мень­ше).

12. Одна запись о медикаменте содержит следующие поля: номер аптеки, назва­ние лекарства, количество упаковок, имеющееся в наличии в данной аптеке, стоимость одной упаковки, дата поступления в аптеку, срок хранения (в днях). Поиск по номеру аптеки, наименованию препарата, дате поступления.

13. Одна запись журнала содержит поля: код игрушки, название игрушки, тип игрушки, возрастные границы (например, от 10 до 15), цена за единицу, коли­чество в наличии, дата поступления в магазин, поставщик. Поиск по дате по­ступления, поставщику, возрастным границам.

14. Один элемент — автомобиль — представляет собой в базе данных структуру с полями: фамилия владельца, код марки автомобиля, марка автомобиля, тре­буемая марка бензина, мощность двигателя, объем бака, остаток бензина, объ­ем масла. Дана фиксированная цена литра бензина и заливки масла. Поиск по марке автомобиля, марке бензина, мощности двигателя, фамилии вла­дельца.

15. Одна запись в журнале зимней экзаменационной сессии представляет собой структуру с полями: курс, код группы, фамилия студента, номер зачетной книжки, дисциплина, оценка за экзамен по дисциплине. Вычисляются сред­ние баллы тю дисциплине, по группе, по курсу. Поиск по курсу, по группе, по номеру зачетной книжки, по фамилии, по оценкам.

16. Структура одной записи оплаты за коммунальные услуги содержит поля: но­мер дома, номер квартиры, фамилия владельца, вид платежа (квартплата, газ, вода, электричество), дата платежа, сумма платежа, процент пени, на сколько дней просрочен платеж. Поиск по номеру дома, квартиры, владельцу, виду платежа, по дате.

17. Одна запись счета за ремонтные работы содержит поля: название фирмы, вид работ, единица измерения, стоимость единицы выполненных работ, дата ис­полнения, количество выполненной работы. Поиск по названию фирмы, виду работ, по дате исполнения.

18. Одна учетная запись журнала стоянки автомобилей имеет структуру: номер автомобиля, фамилия владельца, дата и время начала, дата и время оконча­ния, тариф за час. Поиск по номеру автомобиля, по дате/времени стоянки, по фамилии владельца.

19. Структура одной записи о сельскохозяйственном продукте содержит поля: наименование района (где выращивают), наименование продукта, площадь (га), урожайность (кг/га), цена за 1 кг, потери при транспортировке (%), стоимость продукта. Поиск по наименованию района, по наименованию про­дукта, по урожайности, по площади.

20. В туристической фирме учетная запись о проданном туре содержит следую­щие поля: наименование тура, фамилия клиента, цена 1 дня (в р.), количество дней, стоимость проезда, курс валюты, количество валюты, стоимость поезд­ки. Поиск выполнять по наименованию тура, по фамилии клиента, по стои­мости проезда, по количеству

 



Поделиться:


Последнее изменение этой страницы: 2016-04-26; просмотров: 492; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.18.220.243 (0.019 с.)