3 семестр / 4 лаба
.pdfМинистерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)
Кафедра комплексной информационной безопасности электронно-
вычислительных систем (КИБЭВС)
SQL ОПЕРАТОРЫ ДЛЯ БД СУБД MICROSOFT SQL SERVER В
ПРИЛОЖЕНИИ MICROSOFT VISUAL
Отчет по лабораторной работе №4
по дисциплине «Безопасность систем баз данных»
Студент гр. 711-2
Е. П. Толстолес
________.2023
Принял
Младший преподаватель каф. КИБЭВС
__________ ________ Р.С. Дастанович
________.2023
2023
1 Введение
Цель работы: изучение основных особенностей формирования
запросов в приложении Microsoft Visual Studio для своей предметной области
(расчет заработной платы).
2
2 Ход работы
Создавать запросы можно как через SQL Server Management, так и через Visual Studio. В данной работе рассмотрим оба способа. Для работы через SQL Server Management выполним соединение с сервером и для разработанной базы данных. Создадим запрос соответствующей кнопкой.
Выполним запрос, представленный на рисунках 2.1 и 2.2.
Рисунок 2.1 – Создание запроса
Рисунок 2.2 – Вывод результатов запроса
Помимо полного выведения какой-либо таблицы можно сделать выборку. Для выборки определенных полей из определенной таблицы на примере таблицы Заказ (Рисунок 2.3):
Рисунок 2.3 – Выборка
SELECT [ID специфики], [Описание заказа] FROM dbo.Заказ
3
Иногда возникает потребность трактовать значение одного типа, как значение другого типа. Например, использовать числовое значение как символьную строку или наоборот. В этом случае применяют функцию CAST ( <значение>AS<тип данных> ) Функция CAST делает копию значения,
преобразуя его к указанному типу данных. При этом не следует забывать о множестве типов данных, в которое может быть преобразовано значение. (Рисунок 2.4).
SELECT [ID специфики] , CAST([ID специфики] AS decimal(16, 1))
FROM Специфика
Рисунок 2.4 - CAST
Так же можно делать выборку из нескольких таблиц. Для выборки данных по продажам из двух таблиц БД Заказ и Специфика. Данные таблицы связаны по ID специфики (рисунок 2.5):
SELECT [ID компании], [Описание заказа], [Среда разработки], [Язык программирования], [Срок выполнения]
FROM Заказ, Специфика
Рисунок 2.5 - Выборка по двум таблицам
4
Для запросов можно использовать конструктор запросов. Для этого можно выбрать Создать запрос в редакторе (Рисунок 2.6)
Рисунок 2.6 – Создать запрос в редакторе
И выберем необходимые таблицы, как показано на рисунке 2.7.
Рисунок 2.7 -Добавление таблиц
Затем необходимые поля с необходимыми данными, показанные на рисунке 2.8
5
Рисунок 2.8 – Конструктор запросов
Следующая часть работы будет выполнена в Visual Studio.
Для начала приведем пример запроса без выборки (рисунки 2.9 – 2.11) и
реализуем полную запись SELECT, для примера представим таблицы Компания, Заказ, Специфика.
6
DataTable FillDataGridView(string sqlSelect)
{
SqlConnection connection = new SqlConnection(Properties.Settings.Default.Lab1ConnectionString); SqlCommand command = connection.CreateCommand(); command.CommandText = sqlSelect;
SqlDataAdapter adapter = new SqlDataAdapter(); adapter.SelectCommand = command;
DataTable table = new DataTable(); adapter.Fill(table); connection.Close();
return table;
}
private void Specifika_CheckedChanged(object sender, EventArgs e)
{
dataGridViewSelect.DataSource = FillDataGridView("SELECT * FROM
Специфика");
}
private void Zakaz_CheckedChanged(object sender, EventArgs e)
{
dataGridViewSelect.DataSource = FillDataGridView("SELECT * FROM Заказ");
}
private void Kompania_CheckedChanged(object sender, EventArgs e)
{
dataGridViewSelect.DataSource = FillDataGridView("SELECT * FROM
Компания");
}
Рисунок 2.9 – Пример запросов (Компания)
7
Рисунок 2.10 – Пример запросов (Заказ)
Рисунок 2.11 – Пример запросов (Специфика)
Запросы изменения данных. Эта часть работы является наиболее обширной. Для работы в данном разделе нам нужно запрограммировать методы обновления, Добавления и удаления. Покажем пример использования
8
запросов изменения данных (INSERT, UPDATE, DELETE) на примере
таблицы Компания. Результат работы программы представлен на рисунке
2.12–2.14.
void InsertKompania()
{
if ((String.IsNullOrEmpty(textBox1.Text)))
{
MessageBox.Show("Введите название компании", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
string sqlInsert = @"INSERT INTO dbo.Компания (Название, Email) VALUES (@nazvanie, @EMAIL)";
SqlConnection connection = new SqlConnection(Properties.Settings.Default.Lab1ConnectionString);
connection.Open();
SqlCommand command = connection.CreateCommand(); command.CommandText = sqlInsert; command.Parameters.AddWithValue("@nazvanie", textBox1.Text); command.Parameters.AddWithValue("@EMAIL", textBox2.Text);
try
{
command.ExecuteNonQuery();
}
catch (Exception err)
{
MessageBox.Show("Ошибка выполнения запроса.\n" + err.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
connection.Close();
}
private void button1_Click(object sender, EventArgs e)
{
InsertKompania();
dataGridView1.DataSource = FillDataGridView("SELECT * FROM Компания");
}
void UpdateKompania()
{
if ((String.IsNullOrEmpty(textBox1.Text)))
{
MessageBox.Show("Введите название компании", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
if ((String.IsNullOrEmpty(textBox3.Text)))
{
MessageBox.Show("Обязательно введите ID компании для обновления данных", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
string sqlUpdate = "UPDATE dbo.Компания SET Название = @название, EMAIL=@EMAIL WHERE [ID компании] = @ID_компании";
SqlConnection connection = new SqlConnection(Properties.Settings.Default.Lab1ConnectionString);
connection.Open();
SqlCommand command = connection.CreateCommand();
9
string sqlValues = "";
if (!String.IsNullOrEmpty(textBox1.Text)) sqlValues += "Название=@название,";
if (!String.IsNullOrEmpty(textBox2.Text)) sqlValues += "EMAIL=@EMAIL,";
if (!String.IsNullOrEmpty(textBox1.Text)) command.Parameters.AddWithValue("@Название", textBox1.Text);
if (!String.IsNullOrEmpty(textBox2.Text)) command.Parameters.AddWithValue("@EMAIL", textBox2.Text);
command.CommandText = String.Format(sqlUpdate, sqlValues);
command.Parameters.AddWithValue("@ID_компании", textBox3.Text);
try
{
command.ExecuteNonQuery();
}
catch (Exception err)
{
MessageBox.Show("Ошибка выполнения запроса:\n" + err.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
connection.Close();
}
private void ID_Click(object sender, EventArgs e)
{
UpdateKompania();
dataGridView1.DataSource = FillDataGridView("SELECT * FROM Компания");
}
void DeleteKompania()
{
if (String.IsNullOrEmpty(textBox3.Text))
{
MessageBox.Show("Обязательно укажите ID компании, данные которого необходимо удалить", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
string sqlDelete = @"DELETE FROM dbo.Компания WHERE [ID компании] = @id_kompanii";
SqlConnection connection = new SqlConnection(Properties.Settings.Default.Lab1ConnectionString);
connection.Open();
SqlCommand command = connection.CreateCommand(); command.CommandText = sqlDelete;
command.Parameters.AddWithValue("@id_kompanii", textBox3.Text);
try
{
command.ExecuteNonQuery();
}
catch (Exception err)
{
MessageBox.Show(err.Message, "Ошибка удаления");
}
connection.Close();
10