Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Доступ к базе данных с помощью LINQ to SQL↑ ⇐ ПредыдущаяСтр 8 из 8 Содержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
В данном примере вначале создадим базу данных городов, содержащую два поля: название города и численность его населения. Затем организуем доступ к этой базе данных с помощью 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; просмотров: 524; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.12.163.23 (0.011 с.) |