- •Лабораторная работа 4 Работа с бд в с#
- •Основные сведения
- •Задание на лабораторную работу
- •Часть 2. Модификация, вставка и удаление записей в наборе данных
- •Основные концепции обновления наборов данных в Microsoft .Net
- •Модификация, вставка и удаление записей в наборе данных
- •Модификация данных
- •Сохранение данных
- •Удаление данных
- •Добавление данных
- •Отмена изменений
- •Задание на лабораторную работу
Добавление данных
Создание новой записи с данными по сотруднику в приложении реализуется методом New. При добавлении новых записей в таблицу Employee базы данных необходимо:
Создать новую строку
DataRow rowEmployee = this.dsEmployee.Employee.NewEmployeeRow();
Сформировать начальные значения для элементов строки
rowEmployee["JobRoleID"] = 1;
rowEmployee["EmployeeStatus"] = 0;
rowEmployee["EmployeeSurname"] = "";
rowEmployee["EmployeeName"] = "";
rowEmployee["EmployeePatronymic"] = "";
rowEmployee["Access"] = "не задано";
Добавить сформированную строку к таблице Employee
dsEmployee.Employee.Rows.Add(rowEmployee);
Установить активную позицию в таблице Employee на добавленную строку
int pos = this.dsEmployee.Employee.Rows.Count - 1;
this.BindingContext[dsEmployee, "EmployeeID"].Position = pos;
Задать режим редактирования формы
DisplayForm(false);
Сделать список сотрудников недоступным для выбора
listBoxEmployee.Enabled = false;
Установить фокус на элементе textBoxSurname
textBoxSurname.Focus();
После задания данных по новому сотруднику необходимо их запомнить в базе данных. Для этого требуется модифицировать метод Save, добавив в него фрагмент кода для вставки новых записей перед кодом, модифицирующим записи.
/// Формирование таблицы, в которую включаются только добавленные строки
DataSetEmployee.EmployeeDataTable ds2 = (DataSetEmployee.EmployeeDataTable)dsEmployee.Employee.
GetChanges(DataRowState.Added);
if(ds2 != null)
try
{
daEmployee.Update(ds2);
ds2.Dispose();
dsEmployee.Employee.AcceptChanges( );
}
catch(Exception x)
{
string mes = x.Message;
MessageBox.Show("Ошибка вставки записи в базу данных Employee "+mes, "Предупреждение");
this.dsEmployee.Employee.RejectChanges();
}
В добавляемом фрагменте проверяется наличие в таблице Employee добавленных строк
ds2 != null
и если они имеются, то производится попытка модифицировать базу данных
daEmployee.Update(ds2);
При вставке новых записей в базу данных метод Update адаптера daEmployee вызывает SQL команду INSERT, которая была сформирована при генерации адаптера. Если первичный ключ таблицы базы данных является суррогатным и генерируется сервером автоматически (задано свойство IDENTITY ), которое корректируется в DataSet.
Протестируйте добавленный в программу код.
Удаление данных
Удаление записи с данными по сотруднику в приложении реализуется методом Remove. В процессе удаления записей по сотрудника используется модальное диалоговое окно для вывода сообщения (см. лабораторную работу 1, вид которого представлен на рисунке 10.2, для предупреждения пользователя при проведении операции.
Рис.
10.2.
Диалоговое окно предупреждения
пользователя.
При выборе пункта меню Действие/Удалить формируется событие, которое обрабатывается методом toolStripButtonRemove_Click. Обработчик вызывает метод Remove, который выполняет удаление данных по сотруднику. В методе Remove определяется позиция, которую необходимо удалить в таблице Employee
int pos = -1;
pos = this.BindingContext[dsEmployee, "Employee"].Position;
Затем формируется строка с фамилией, именем и отчеством, удаляемого сотрудника
string mes = textBoxSurname.Text.ToString().Trim() + " "
+ textBoxName.Text.ToString().Trim() + " " +
textBoxPatronymic.Text.ToString().Trim();
и выводится сообщение в диалоговом окне
MessageBox.Show(" Удалить данные \n по сотруднику \n"+ mes+ "?", "Предупреждение",
MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
Далее в зависимости от того, какую кнопку нажал пользователь, осуществляется удаление записи. Если пользователь нажал кнопку "Да", то необходимо выполнить следующий код:
this.dsEmployee.Employee.Rows[pos].Delete();
if (this.dsEmployee.Employee.GetChanges(DataRowState.Deleted) != null)
{
try
{
this.daEmployee.Update(dsEmployee.Employee);
this.dsEmployee.Employee.AcceptChanges();
}
catch (Exception x)
{
string er = x.Message.ToString();
MessageBox.Show("Ошибка удаления записи в базе данных Employee " + er, "Предупреждение");
this.dsEmployee.Employee.RejectChanges();
}
}
При нажатии кнопки "Нет", то необходимо выполнить код:
this.dsEmployee.Employee.RejectChanges();
Протестируйте добавленный в программу код.
