Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD_Visual.doc
Скачиваний:
38
Добавлен:
15.11.2019
Размер:
2 Мб
Скачать
☆

4 Подготовка запросов sql с параметрами. Модификация данных

4.1 Цель работы

Приобретение опыта при использовании динамических запросов с задаваемыми параметрами, освоение запросов языка SQL для модификации данных.

4.2 Методические указания по организации самостоятельной работы студентов

Необходимо повторить следующий теоретический материал: элемент TableAdapter и его свойства, запросы на модификацию данных.

4.3 Порядок выполнения работы и методические указания к её выполнению

Добавьте к программе ещё одну форму (EditForm), на которой разместите объекты для добавления и изменения данных, и дайте соответствующие названия элементам формы (рисунок 4.1)

Рисунок 4.1 – Форма ввода данных

Задайте источник данных для элементов типа comboBox. Для этого выберите элемент comboBox_Gender. Существует 2 способа получения доступа к элементам коллекции, которая будет представлять возможные значения в элементе comboBox. Первый способ - выбрать свойство Items, в окне Properties, и нажать на кнопку (рисунок 4.2). Второй способ – нажать на стрелку в правом верхнем углу элемента, в появившемся меню выбрать пункт Edit Items (рисунок 4.3).

Рисунок 4.2 – Окно свойств компонента comboBox

Рисунок 4.3 – Меню компонента comboBox

В появившемся окне напишите возможные значения элемента: мужской, женский (рисунок 4.4).

Рисунок 4.4 – Редактирование списка в компоненте comboBox

Для задания типа льготы, следует сделать привязку данных к таблице Priveleges. Для этого выберите элемент comboBox_Priveleges и, в меню, которое появляется при нажатии на стрелку в правом верхнем углу элемента, выберите Use data bound items. Указать значения, как показано на рисунке 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 / Use SQL Statament/ DELETE добавить запрос на удаление:

DELETE FROM Students WHERE ([Student code] = ?)

Сохранить запрос, дав ему имя DeleteQuery.

Далее следует добавить новый запрос для получения данных с параметрами в StudentsTableAdapter, для этого щелкнуть правой кнопкой мыши по StudentsTableAdapter и аналогично выполнив действия AddQuery / Use SQL Statament/ SELECT which returns rows и добавить следующий запрос.

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 – Просмотр запросов для добавления и модификации данных

Теперь можно перейти к коду для работы с формой. Данная форма будет иметь два конструктора. Первый – без параметров, для добавления новой записи, второй будет принимать информацию о значениях полей выбранной строки, для редактирования информации. Напишите их, предварительно объявив переменные.

/// <summary>

/// true - если запись модифицируется, false - если создаётся новая

/// </summary>

bool edit;

/// <summary>

/// id модифицируемого элемента

/// </summary>

int id;

/// <summary>

/// конструктор формы, для создания новой записи

/// </summary>

public EditForm()

{

InitializeComponent();

roomsTableAdapter.Fill(hostelDataSet.Rooms);

privelegesTableAdapter.Fill(hostelDataSet.Priveleges);

edit = false;

}

/// <summary>

/// конструктор формы, для модификации уже существующей записи

/// </summary>

/// <param name="SNP">Значение поля ФИО</param>

/// <param name="BirthDate">Значение поля Дата рождения</param>

/// <param name="Gender">Значение поля пол</param>

/// <param name="Address">Значение поля адресс</param>

/// <param name="Group">Значение поля академическа группа</param>

/// <param name="Discount">Значение поля тип льготы</param>

/// <param name="Doc">Значение поля документ</param>

/// <param name="room">Значение поля комната</param>

/// <param name="id">Первичный ключ поля</param>

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 Можно ли изменять данные в несколькиз таблицах одной командой?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]