лабораторные работы. Методические указания по организации самостоятельной работы студентов Для подготовки к лабораторной работе необходимо повторить следующий теоретический материал таблица, поле, запись, ячейка, ключ, типы данных в ms access, целостность данных
Скачать 1.73 Mb.
|
1 2 3 ИСПОЛЬЗОВАНИЕ ЗАПРОСОВ SQL. ОПЕРАТОР SELECT3.1 Цель работы Приобретение навыков использования в программе визуального компонента dataGridView и изучение особенностей класса OleDbConnection для реализации запросов SQL и улучшения знаний о возможностях оператора SELECT. 3.2 Методические указания по организации самостоятельной работы студентов Начальным требованием для выполнения задания является знание таких теоретических знаний: структурированный язык (SQL); запрос; оператор SELECT; визуальный компонент dataGridView; статический запрос в VisualStudio. 3.3 Порядок выполнения работы и методические указания по ее выполнению Реализуем дополнительные возможности в нашей программе. Добавим в проект новую форму, благодаря которой пользователь сможет писать произвольные запросы к БД. Это будет своеобразный редактор запросов, который позволит узнать об основных возможностях оператора SELECT. 3.3.1 Установка компонентов на форму Через пункт Project/AddNewItem/WindowsForm добавьте к проекту новую форму. Назовите ее QueryEdit и сохраните в файле QueryEdit.cs. Добавьте в главном меню программы еще один пункт QueryEdit и создайте для него обработчик события: private void queryEditionToolStripMenuItem1_Click(object sender, EventArgs e) { QueryEdit qe = new QueryEdit(); qe.Show(); } Добавьте на форму QueryEdit следующие компоненты: RichTextBox, три Button, DataGridView и расположите их так, как указано на рисунке 3.1. Установите заданным по умолчанию текст у компонента RichTextBox равным «SELECT» (свойство Text) и дайте компоненту имя TestInput (свойство Name). Установите свойство Text для кнопок в «Clear», «Do SQL» и «Exit». После всех указанных действий форма должна принять вид, указанный на рисунке 3.1. Рисунок 3.1 - Пример конечной формы 3.3.2. Добавление кода В разделе подключаемых модулей добавьте к существующему списку модуль System.Data.OleDb; using System.Data.OleDb; В обработчик события OnClick кнопки Do SQL поместите код: private void button1_Click(object sender, EventArgs e) { try { OleDbConnection sqlconn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"Way…. \""); sqlconn.Open(); OleDbDataAdapter oda = new OleDbDataAdapter(TestInput.Text, sqlconn); DataTable dt = new DataTable(); oda.Fill(dt); dataGridView1.DataSource = dt; sqlconn.Close(); } catch(Exception ex) { MessageBox.Show("Error"); } } В этом коде в «Way….» необходимо указать место, где находится БД. Например: “ D:\\temp\\BD\\HostelApp\\HostelApp\\bin\\Debug\\Hostel.mdb ” Добавьте в обработчик события OnClick кнопки Clear: private void button2_Click(object sender, EventArgs e) { TestInput.Clear(); TestInput.Text = "Select"; } И добаьте код в обработчик события OnClick кнопки Exit: private void button3_Click (object sender, EventArgs e) { this.Close(); } 3.3.3 Представление данных из таблицы Запустите программу. Теперь введите в поле для запросов текст: SELECT * FROM STUDENTS Далее нажмите на кнопку Do SQL. В сетке должны появиться данные из таблицы Students (рис. 3.2). Знак * указывает, что необходимо вывести все поля из таблицы. Рисунок 3.2 - Пример работы редактора запросов Для уменьшения количества полей, который возвращаются можно перечислить необходимые поля вместо знака *: SELECT SNP, Group, Room FROM STUDENTS Можно увеличить количество полей, добавив вычислительное поле: SELECT SNP,rooms.value*(100-Priveleges.Discount)/100 as pay, pay*12 as year_pay FROM Students, Priveleges, Rooms WHERE Students.[Privelege code] = Priveleges.[Privelege code] AND Rooms.[Room N] = Students.Room Здесь поле pay является вычисляемым полем, которое показывает сколько студент платит за проживание за один месяц, а year_pay - за год. Во многих случаях необходимо удалить повторяющиеся значения строк. Для этого можно использовать ключевое слово Distinct: SELECT DISTINCT group FROM STUDENTS Этот запрос выводит список групп, студенты которых проживают в этом общежитии. Попробуйте использовать его без DISTINCT и тогда -список увеличится. Для ограничения количества записей, которые возвращаются, в оператор Select вводится параметр Where <булевое выражение>. Например: SELECT * FROM rooms where flour=3 Оператор выведет все строки из таблицы rooms, в которых номер комнаты равен 3. SELECT * FROM students where students.Group like 'ПИ%' Этот оператор вернет данные о всех студентах, которые учатся на потоке ПИ. После слова like стоит шаблон, с которым сравниваются значения каждой записи в поле group. Символ "%" означает возможность нескольких или отсутствие символов. Можно применять символ "_", который заменяет 1 символ. Соединение таблиц позволяет связать данные более чем из одной таблицы, которые имеют логические связи: SELECT students.*, Priveleges.[Privelege type], Priveleges.Discount FROM Students, Priveleges WHERE Students.[Privelege Code]= Priveleges.[Privelege Code] Этот оператор вернет всю информацию из обоих таблиц, связав записи по номеру привилегии. Можно провести анализ данных, выполнив их группировку. Например: можно вывести количество студентов из каждой группы, проживающих в данном общежитии. Это выполняет следующий запрос: Select group, count(SNP) from Students group by Group Для ограничения количества результирующих групп используется параметр HAVING: Select group, count(SNP) from Students group by Group Having Count(SNP) > 5 Данный пример выведет список групп и количество студентов из этих групп, проживающих в общежитии, для тех групп, количество в которых более 5. Попробуйте построить свои запросы, а потом выполните те запросы, которые даст вам преподаватель. 3.4 Содержание отчета: Отчет должен содержать: цель, задание на запросы, полученные от преподавателя, построенные команды SELECT и результат их выполнения, выводы по работе. 3.5 Контрольные задания и вопросы 1 Как реализовать запрос на выборку? Какие компоненты при этом нужно использовать! 2 Как вывести данные без повторения строк? 3 Как вывести данные из нескольких таблиц? 4 Как ввести в запрос ограничение на группы? 5 Какие булевы операторы можно использовать в предложении WHERE? 4 ПОДГОТОВКА ЗАПРОСОВ SQL С ПАРАМЕТРАМИ. МОДИФИКАЦИЯ ДАННЫХ 4.1 Цель работы Приобретение опыта при использовании динамических запросов с задаваемыми параметрами, освоение запросов языка SQL для модификации данных. 4.2 Методические указания по организации самостоятельной работы студентов Необходимо повторить следующий теоретический материал: элемент TableAdapter и его свойства, запросы на модификацию данных. 4.3 Порядок выполнения работы и методические указания к её выполнению Добавьте к программе ещё одну форму (EditForm), на которой разместите объекты для добавления и изменения данных, и дайте соответствующие названия элементам формы (рисунок 4.1) Рисунок 4.1 – Форма ввода данных Задайте источник данных для элементов типа comboBox. Для этого выберите элемент comboBox_Gender. Существует 2 способа получения доступа к элементам коллекции, которая будет представлять возможные значения в элементе comboBox. Первый способ - выбрать свойство Items, в окне Properties, и нажать на кнопку (рисунок 4.2). Второй способ – нажать на стрелку в правом верхнем углу элемента, в появившемся меню выбрать пункт EditItems (рисунок 4.3). Рисунок 4.2 – Окно свойств компонента comboBox Рисунок 4.3 – Меню компонента comboBox В появившемся окне напишите возможные значения элемента: мужской, женский (рисунок 4.4). Рисунок 4.4 – Редактирование списка в компоненте comboBox Для задания типа льготы, следует сделать привязку данных к таблице Priveleges. Для этого выберите элемент comboBox_Priveleges и, в меню, которое появляется при нажатии на стрелку в правом верхнем углу элемента, выберите Usedatabounditems. Указать значения, как показано на рисунке 4.5. Сделайте аналогичные действия для comboBox_Room, указав значения как на рисунке 4.6. Рисунок 4.5 – Привязка данных о льготе к таблице Priveleges Рисунок 4.6 - Привязка данных для comboBox_Room С панели инструментов (ToolBox) добавьте на форму компонент StudentsTableAdapter и дайте ему имя studentsTableAdapter (как аналог: добавьте на форму элемент bindingSource и перетащите его на форму. Откройте свойства bindingSource1 и щелкните по полю DataSource. Выберите Other Data Sources/ Project Data Sources/ HostelDataSet . В свойстве Data Member выбрать таблицу Students ). Создайте запросы для добавления и модификации данных. Для этого следует в окне Solution Explorer щелкнуть дважды источник данных HostelDataSet. В открывшемся дизайнере источника данных выбрать StudentsTableAdapter, нажать правой кнопкой мыши и в появившемся меню выбрать AddQuery, затем Use SQL Statament, затем Next. В окне выбора типа запроса выбрать UPDATE и нажать Next. Заменить текст предлагаемого запроса на приведенный ниже и в следующем окне задать имя запроса UpdateQuery. UPDATE Students SET SNP = ?, [Birth Year] = ?, Gender = ?, Address = ?, [Group] = ?, [Privelege Code] = ?, [Passport] = ?, [Room] = ? WHERE ([Student Code] = ?) Опять щелкнуть правой кнопкой мыши по StudentsTableAdapter и аналогично выполнив действия AddQuery / UseSQLStatament/ DELETE добавить запрос на удаление: DELETE FROM Students WHERE ([Student code] = ?) Сохранить запрос, дав ему имя DeleteQuery. Далее следует добавить новый запрос для получения данных с параметрами в StudentsTableAdapter, для этого щелкнуть правой кнопкой мыши по StudentsTableAdapter и аналогично выполнив действияAddQuery / UseSQLStatament/ SELECTwhichreturnsrows и добавить следующий запрос. SELECT [Student code], SNP, [Birth Year], Gender, Address, [Group], [Privelege code], [Passport], [Room], [Colonize date] FROM Students WHERE ([Student code] = ?) Запрос на добавление данных можно не добавлять, так как требуемый текст совпадает со стандартной командой INSERT прописанной а адаптере таблицы. Посмотреть (и исправить при необходимости) стандартные команды, прописанные в адаптере таблицы можно, выбрав нужный адаптер таблицы (например, StudentsTableAdapter) в дизайнере источника данных, и открыв в окне Properties нужные запросы (рис. 4.7) Рисунок 4.7 – Просмотр запросов для добавления и модификации данных Теперь можно перейти к коду для работы с формой. Данная форма будет иметь два конструктора. Первый – без параметров, для добавления новой записи, второй будет принимать информацию о значениях полей выбранной строки, для редактирования информации. Напишите их, предварительно объявив переменные. /// /// true - если запись модифицируется, false - если создаётся новая /// bool edit; /// /// id модифицируемого элемента /// int id; /// /// конструктор формы, для создания новой записи /// public EditForm() { InitializeComponent(); roomsTableAdapter.Fill(hostelDataSet.Rooms); privelegesTableAdapter.Fill(hostelDataSet.Priveleges); edit = false; } /// /// конструктор формы, для модификации уже существующей записи /// /// Значение поля ФИО /// Значение поля Дата рождения /// Значение поля пол /// Значение поля адресс /// Значение поля академическа группа /// Значение поля тип льготы /// Значение поля документ /// Значение поля комната /// Первичный ключ поля public EditForm(String SNP, DateTime BirthDate, String Gender, String Address, String Group, int Discount, String Doc, int room, int id) :this() { roomsTableAdapter.Fill(hostelDataSet.Rooms); privelegesTableAdapter.Fill(hostelDataSet.Priveleges); edit = true; this.id = id; this.textBox_SNP.Text = SNP; this.dateTimePicker_Birth.Value = BirthDate; if (Gender.ToUpper() == "М") { comboBox_Gender.SelectedIndex = 0; } else if(Gender.ToUpper() == "Ж") { comboBox_Gender.SelectedIndex = 1; } this.textBox_Address.Text = Address; this.textBox_Group.Text = Group; this.comboBox_Discount.SelectedValue = Discount; this.textBox_Document.Text = Doc; this.comboBox_Room.SelectedValue = room; } Уберите из функции обработки события EditForm_Load строки заполнения адаптеров таблиц (так как они заполняются в конструкторах): roomsTableAdapter.Fill(hostelDataSet.Rooms); privelegesTableAdapter.Fill(hostelDataSet.Priveleges); Создайте обработчики нажатия на кнопки. private void button_OK_Click(object sender, EventArgs e) { string Gender = ""; if (comboBox_Gender.SelectedIndex == 0) { Gender = "М"; } else if (comboBox_Gender.SelectedIndex == 1) { Gender = "Ж"; } if (edit) { studentsTableAdapter.UpdateQuery(textBox_SNP.Text, dateTimePicker_Birth.Value, Gender, textBox_Address.Text, textBox_Group.Text, Convert.ToInt32(comboBox_Discount.SelectedValue), textBox_Document.Text, Convert.ToInt32(comboBox_Room.SelectedValue), id); } else { studentsTableAdapter.Insert(textBox_SNP.Text, dateTimePicker_Birth.Value, Gender, textBox_Address.Text, textBox_Group.Text, Convert.ToInt32(comboBox_Discount.SelectedValue), textBox_Document.Text, Convert.ToInt32(comboBox_Room.SelectedValue), DateTime.Now); } this.Close();} private void button_Cancel_Click(object sender, EventArgs e) { this.Close(); } К главной форме, созданой на первой работе, следует добавить пункт меню EditForm и подпункты в него: Add, Delete иUpdate(рисунок 4.8). Измените у элемента DataGridView1 в свойстве SelectionMode значение на FullRowSelect. Рисунок 4.8 – Изменение главной формы Создайте обработчики событий нажатия пунктов меню, добавив соответствующий код. private void aDDToolStripMenuItem_Click(object sender, EventArgs e) { EditForm edt = new EditForm(); edt.ShowDialog(); studentsTableAdapter.Fill(hostelDataSet.Students); hostelDataSet.AcceptChanges(); } private void updateToolStripMenuItem_Click(object sender, EventArgs e) { HostelDataSet.StudentsDataTable st = new HostelDataSet.StudentsDataTable(); studentsTableAdapter.FillBy(st, Convert.ToInt32(dataGridView1.SelectedRows[0].Cells[0].Value)); object[] row = st.Rows[0].ItemArray; EditForm edt = new EditForm(row[1].ToString(), Convert.ToDateTime(row[2]), row[3].ToString(), row[4].ToString(), row[5].ToString(), Convert.ToInt32(row[6]), row[7].ToString(), Convert.ToInt32(row[8]), Convert.ToInt32(row[0])); edt.ShowDialog(); studentsTableAdapter.Fill(hostelDataSet.Students); hostelDataSet.AcceptChanges(); } private void deleteToolStripMenuItem_Click(object sender, EventArgs e) { studentsTableAdapter.DeleteQuery(Convert.ToInt32(dataGridView1.SelectedRows[0].Cells[0].Value)); studentsTableAdapter.Fill(hostelDataSet.Students); hostelDataSet.AcceptChanges(); } Протестируйте приложение. 4.4 Содержание отчета Отчет должен содержать: цель, задания полученные от преподавателя и результат их выполнения, выводы по работе. 4.5 Контрольные задания и вопросы 1 Расскажите про элемент TableAdapter иего свойства. 2 Какая команда добавляет строки в таблицу? 3 Какая команда изменяет строки в таблице? 4 Какая команда удаляет строки из таблицы? 5 Как изменить или удалить данные в одной таблице, основываясь на сведения из другой таблицы? 6 Можно ли изменять данные в несколькиз таблицах одной командой? 5 Формирование отчетов 5.1 Цель работы: Научиться создавать отчеты с помощью инструмента Windows Report Viewer. 5.2 Методические указания по организации самостоятельной работы студентов Необходимо повторить следующий теоретический материал: элементы для построения отчетов, элемент MicrosoftReportViewer и его свойства, 5.3 Порядок выполнения работы и методические указания к её выполнению 5.3.1 Создание новый формы Создайте новую форму в текущем проекте и задайте ей имя ReportViewer. Вынесите объект MicrosoftReportViewer на созданную форму (рисунок 5.1). Рисунок 5.1 - Форма ReportViewer Перейдите на главную форму MainForm. Добавьте пункт меню ReportViewer. Щелкните дважды по этому полю и напишите следующий код: private void reportViewerToolStripMenuItem_Click(object sender, EventArgs e) { ReportViewer rf = new ReportViewer(); rf.ShowDialog(); } 5.3.2 Создание отчета Щелкните левой кнопкой мыши по стрелочке в уголке элемента ReportViewer1. В выпадающем меню выберите пункт Designa New Report. Откроется диалоговое окно Мастер создания отчетов (рисунок 5.2).В мастере формирования отчетов выполните все пункты, которые показаны на рисунках 5.3 – 5.7. Рисунок 5.2 - Мастер отчетов Рисунок 5.3 - Выбора источника данных Рисунок 5.4 - Выбор типа отчета Рисунок 5.5 - Создание таблицы Рисунок 5.6 - Выбор макета таблицы Рисунок 5.7 - Выбор стиля отчета Рисунок 5.7 - Завершение работы мастера отчетов 5.3.3 Выбор источника отчетов для WindowsReportViewer1. Перейдите на форму ReportViewer. Щелкните левой кнопкой мыши по элементу WindowsReportViewer1. В выпадающем меню выберите пункт ChooseReport и выберите ваш созданный отчет. Протестируйте приложение. 5.4 Содержание отчета Отчет должен содержать: цель, задания полученные от преподавателя и результат их выполнения, выводы по работе. 5.5 Контрольные задания и вопросы 1 Расскажите про элемент MicrosoftReportViewer иего свойства. 2 Для чего нужны отчеты в базах данных? 3 Как сформировать отчет и подключить его к программе? 1 2 |