Сделал подсчет времени для сложных запросов в 5 лабе

This commit is contained in:
Илья 2024-05-08 02:57:19 +04:00
parent 0bdd4f8f99
commit 42dd04d966
5 changed files with 112 additions and 22 deletions

View File

@ -0,0 +1,9 @@
namespace ElectronicDiaryAbstractions.WorkAbstractions
{
public interface IComplexQueriesWork
{
void ExecuteFirstQuery();
void ExecuteSecondQuery();
}
}

View File

@ -0,0 +1,24 @@
using ElectronicDiaryAbstractions.WorkAbstractions;
using Npgsql;
namespace ElectronicDiaryPostgresImplementation.WorkImplementation
{
public class ComplexQueriesWork : IComplexQueriesWork
{
public void ExecuteFirstQuery()
{
using var con = SqlConnection.GetConnection();
con.Open();
using var cmd = new NpgsqlCommand("SELECT * FROM student JOIN lesson ON lesson.fk_student_id = student.student_id JOIN grade ON student.fk_grade_id = grade.grade_id JOIN user_info ON student.fk_user_id = user_info.user_id JOIN teacher ON grade.fk_teacher_id = teacher.teacher_id JOIN homework ON lesson.fk_homework_id = homework.homework_id JOIN mark ON lesson.fk_mark_id = mark.mark_id JOIN subject ON lesson.fk_subject_id = subject.subject_id JOIN teacher_subject ON teacher_subject.fk_teacher_id = teacher.teacher_id AND teacher_subject.fk_subject_id = subject.subject_id JOIN study_area ON lesson.fk_study_area_id = study_area.study_area_id JOIN subject_student ON subject_student.fk_student_id = student.student_id AND subject_student.fk_subject_id = subject.subject_id", con);
cmd.ExecuteNonQuery();
}
public void ExecuteSecondQuery()
{
using var con = SqlConnection.GetConnection();
con.Open();
using var cmd = new NpgsqlCommand("SELECT study_area.study_area_name, COUNT(lesson.lesson_id) AS total_lessons FROM lesson JOIN study_area ON lesson.fk_study_area_id = study_area.study_area_id GROUP BY study_area.study_area_name", con);
cmd.ExecuteNonQuery();
}
}
}

View File

@ -44,16 +44,21 @@
получение1000ЗаписейToolStripMenuItem = new ToolStripMenuItem(); получение1000ЗаписейToolStripMenuItem = new ToolStripMenuItem();
обновление1000ЗаписейToolStripMenuItem = new ToolStripMenuItem(); обновление1000ЗаписейToolStripMenuItem = new ToolStripMenuItem();
удаление1000ЗаписейToolStripMenuItem = new ToolStripMenuItem(); удаление1000ЗаписейToolStripMenuItem = new ToolStripMenuItem();
замерыСложныхЗапросовToolStripMenuItem = new ToolStripMenuItem();
первыйЗапросToolStripMenuItem = new ToolStripMenuItem();
второйЗапросToolStripMenuItem1 = new ToolStripMenuItem();
labelTest = new Label(); labelTest = new Label();
menuStrip1.SuspendLayout(); menuStrip1.SuspendLayout();
SuspendLayout(); SuspendLayout();
// //
// menuStrip1 // menuStrip1
// //
menuStrip1.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, замерВремениToolStripMenuItem }); menuStrip1.ImageScalingSize = new Size(20, 20);
menuStrip1.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, замерВремениToolStripMenuItem, замерыСложныхЗапросовToolStripMenuItem });
menuStrip1.Location = new Point(0, 0); menuStrip1.Location = new Point(0, 0);
menuStrip1.Name = "menuStrip1"; menuStrip1.Name = "menuStrip1";
menuStrip1.Size = new Size(554, 24); menuStrip1.Padding = new Padding(7, 3, 0, 3);
menuStrip1.Size = new Size(633, 30);
menuStrip1.TabIndex = 0; menuStrip1.TabIndex = 0;
menuStrip1.Text = "menuStrip1"; menuStrip1.Text = "menuStrip1";
// //
@ -61,69 +66,69 @@
// //
справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { предметыToolStripMenuItem, классыToolStripMenuItem, ученикиToolStripMenuItem, учителяToolStripMenuItem, домашниеЗаданияToolStripMenuItem, урокиToolStripMenuItem, оценкиToolStripMenuItem, пользователиToolStripMenuItem, учебныеПомещенияToolStripMenuItem }); справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { предметыToolStripMenuItem, классыToolStripMenuItem, ученикиToolStripMenuItem, учителяToolStripMenuItem, домашниеЗаданияToolStripMenuItem, урокиToolStripMenuItem, оценкиToolStripMenuItem, пользователиToolStripMenuItem, учебныеПомещенияToolStripMenuItem });
справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem"; справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem";
справочникиToolStripMenuItem.Size = new Size(94, 20); справочникиToolStripMenuItem.Size = new Size(117, 24);
справочникиToolStripMenuItem.Text = "Справочники"; справочникиToolStripMenuItem.Text = "Справочники";
// //
// предметыToolStripMenuItem // предметыToolStripMenuItem
// //
предметыToolStripMenuItem.Name = "предметыToolStripMenuItem"; предметыToolStripMenuItem.Name = "предметыToolStripMenuItem";
предметыToolStripMenuItem.Size = new Size(192, 22); предметыToolStripMenuItem.Size = new Size(241, 26);
предметыToolStripMenuItem.Text = "Предметы"; предметыToolStripMenuItem.Text = "Предметы";
предметыToolStripMenuItem.Click += ПредметыToolStripMenuItem_Click; предметыToolStripMenuItem.Click += ПредметыToolStripMenuItem_Click;
// //
// классыToolStripMenuItem // классыToolStripMenuItem
// //
классыToolStripMenuItem.Name = "классыToolStripMenuItem"; классыToolStripMenuItem.Name = "классыToolStripMenuItem";
классыToolStripMenuItem.Size = new Size(192, 22); классыToolStripMenuItem.Size = new Size(241, 26);
классыToolStripMenuItem.Text = "Классы"; классыToolStripMenuItem.Text = "Классы";
классыToolStripMenuItem.Click += КлассыToolStripMenuItem_Click; классыToolStripMenuItem.Click += КлассыToolStripMenuItem_Click;
// //
// ученикиToolStripMenuItem // ученикиToolStripMenuItem
// //
ученикиToolStripMenuItem.Name = "ученикиToolStripMenuItem"; ученикиToolStripMenuItem.Name = "ученикиToolStripMenuItem";
ученикиToolStripMenuItem.Size = new Size(192, 22); ученикиToolStripMenuItem.Size = new Size(241, 26);
ученикиToolStripMenuItem.Text = "Ученики"; ученикиToolStripMenuItem.Text = "Ученики";
ученикиToolStripMenuItem.Click += УченикиToolStripMenuItem_Click; ученикиToolStripMenuItem.Click += УченикиToolStripMenuItem_Click;
// //
// учителяToolStripMenuItem // учителяToolStripMenuItem
// //
учителяToolStripMenuItem.Name = "учителяToolStripMenuItem"; учителяToolStripMenuItem.Name = "учителяToolStripMenuItem";
учителяToolStripMenuItem.Size = new Size(192, 22); учителяToolStripMenuItem.Size = new Size(241, 26);
учителяToolStripMenuItem.Text = "Учителя"; учителяToolStripMenuItem.Text = "Учителя";
учителяToolStripMenuItem.Click += УчителяToolStripMenuItem_Click; учителяToolStripMenuItem.Click += УчителяToolStripMenuItem_Click;
// //
// домашниеЗаданияToolStripMenuItem // домашниеЗаданияToolStripMenuItem
// //
домашниеЗаданияToolStripMenuItem.Name = омашниеЗаданияToolStripMenuItem"; домашниеЗаданияToolStripMenuItem.Name = омашниеЗаданияToolStripMenuItem";
домашниеЗаданияToolStripMenuItem.Size = new Size(192, 22); домашниеЗаданияToolStripMenuItem.Size = new Size(241, 26);
домашниеЗаданияToolStripMenuItem.Text = "Домашние задания"; домашниеЗаданияToolStripMenuItem.Text = "Домашние задания";
домашниеЗаданияToolStripMenuItem.Click += ДомашниеЗаданияToolStripMenuItem_Click; домашниеЗаданияToolStripMenuItem.Click += ДомашниеЗаданияToolStripMenuItem_Click;
// //
// урокиToolStripMenuItem // урокиToolStripMenuItem
// //
урокиToolStripMenuItem.Name = "урокиToolStripMenuItem"; урокиToolStripMenuItem.Name = "урокиToolStripMenuItem";
урокиToolStripMenuItem.Size = new Size(192, 22); урокиToolStripMenuItem.Size = new Size(241, 26);
урокиToolStripMenuItem.Text = "Уроки"; урокиToolStripMenuItem.Text = "Уроки";
урокиToolStripMenuItem.Click += УрокиToolStripMenuItem_Click; урокиToolStripMenuItem.Click += УрокиToolStripMenuItem_Click;
// //
// оценкиToolStripMenuItem // оценкиToolStripMenuItem
// //
оценкиToolStripMenuItem.Name = "оценкиToolStripMenuItem"; оценкиToolStripMenuItem.Name = "оценкиToolStripMenuItem";
оценкиToolStripMenuItem.Size = new Size(192, 22); оценкиToolStripMenuItem.Size = new Size(241, 26);
оценкиToolStripMenuItem.Text = "Оценки"; оценкиToolStripMenuItem.Text = "Оценки";
оценкиToolStripMenuItem.Click += ОценкиToolStripMenuItem_Click; оценкиToolStripMenuItem.Click += ОценкиToolStripMenuItem_Click;
// //
// пользователиToolStripMenuItem // пользователиToolStripMenuItem
// //
пользователиToolStripMenuItem.Name = "пользователиToolStripMenuItem"; пользователиToolStripMenuItem.Name = "пользователиToolStripMenuItem";
пользователиToolStripMenuItem.Size = new Size(192, 22); пользователиToolStripMenuItem.Size = new Size(241, 26);
пользователиToolStripMenuItem.Text = "Пользователи"; пользователиToolStripMenuItem.Text = "Пользователи";
пользователиToolStripMenuItem.Click += ПользователиToolStripMenuItem_Click; пользователиToolStripMenuItem.Click += ПользователиToolStripMenuItem_Click;
// //
// учебныеПомещенияToolStripMenuItem // учебныеПомещенияToolStripMenuItem
// //
учебныеПомещенияToolStripMenuItem.Name = "учебныеПомещенияToolStripMenuItem"; учебныеПомещенияToolStripMenuItem.Name = "учебныеПомещенияToolStripMenuItem";
учебныеПомещенияToolStripMenuItem.Size = new Size(192, 22); учебныеПомещенияToolStripMenuItem.Size = new Size(241, 26);
учебныеПомещенияToolStripMenuItem.Text = "Учебные помещения"; учебныеПомещенияToolStripMenuItem.Text = "Учебные помещения";
учебныеПомещенияToolStripMenuItem.Click += УчебныеПомещенияToolStripMenuItem_Click; учебныеПомещенияToolStripMenuItem.Click += УчебныеПомещенияToolStripMenuItem_Click;
// //
@ -131,54 +136,76 @@
// //
замерВремениToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { добавление1000ЗаписейToolStripMenuItem, получение1000ЗаписейToolStripMenuItem, обновление1000ЗаписейToolStripMenuItem, удаление1000ЗаписейToolStripMenuItem }); замерВремениToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { добавление1000ЗаписейToolStripMenuItem, получение1000ЗаписейToolStripMenuItem, обновление1000ЗаписейToolStripMenuItem, удаление1000ЗаписейToolStripMenuItem });
замерВремениToolStripMenuItem.Name = амерВремениToolStripMenuItem"; замерВремениToolStripMenuItem.Name = амерВремениToolStripMenuItem";
замерВремениToolStripMenuItem.Size = new Size(114, 20); замерВремениToolStripMenuItem.Size = new Size(144, 24);
замерВремениToolStripMenuItem.Text = "Замеры времени"; замерВремениToolStripMenuItem.Text = "Замеры времени";
// //
// добавление1000ЗаписейToolStripMenuItem // добавление1000ЗаписейToolStripMenuItem
// //
добавление1000ЗаписейToolStripMenuItem.Name = обавление1000ЗаписейToolStripMenuItem"; добавление1000ЗаписейToolStripMenuItem.Name = обавление1000ЗаписейToolStripMenuItem";
добавление1000ЗаписейToolStripMenuItem.Size = new Size(217, 22); добавление1000ЗаписейToolStripMenuItem.Size = new Size(277, 26);
добавление1000ЗаписейToolStripMenuItem.Text = "Добавление 1000 записей"; добавление1000ЗаписейToolStripMenuItem.Text = "Добавление 1000 записей";
добавление1000ЗаписейToolStripMenuItem.Click += Добавление1000ЗаписейToolStripMenuItem_Click; добавление1000ЗаписейToolStripMenuItem.Click += Добавление1000ЗаписейToolStripMenuItem_Click;
// //
// получение1000ЗаписейToolStripMenuItem // получение1000ЗаписейToolStripMenuItem
// //
получение1000ЗаписейToolStripMenuItem.Name = "получение1000ЗаписейToolStripMenuItem"; получение1000ЗаписейToolStripMenuItem.Name = "получение1000ЗаписейToolStripMenuItem";
получение1000ЗаписейToolStripMenuItem.Size = new Size(217, 22); получение1000ЗаписейToolStripMenuItem.Size = new Size(277, 26);
получение1000ЗаписейToolStripMenuItem.Text = "Получение 1000 записей"; получение1000ЗаписейToolStripMenuItem.Text = "Получение 1000 записей";
получение1000ЗаписейToolStripMenuItem.Click += Получение1000ЗаписейToolStripMenuItem_Click; получение1000ЗаписейToolStripMenuItem.Click += Получение1000ЗаписейToolStripMenuItem_Click;
// //
// обновление1000ЗаписейToolStripMenuItem // обновление1000ЗаписейToolStripMenuItem
// //
обновление1000ЗаписейToolStripMenuItem.Name = "обновление1000ЗаписейToolStripMenuItem"; обновление1000ЗаписейToolStripMenuItem.Name = "обновление1000ЗаписейToolStripMenuItem";
обновление1000ЗаписейToolStripMenuItem.Size = new Size(217, 22); обновление1000ЗаписейToolStripMenuItem.Size = new Size(277, 26);
обновление1000ЗаписейToolStripMenuItem.Text = "Обновление 1000 записей"; обновление1000ЗаписейToolStripMenuItem.Text = "Обновление 1000 записей";
обновление1000ЗаписейToolStripMenuItem.Click += Обновление1000ЗаписейToolStripMenuItem_Click; обновление1000ЗаписейToolStripMenuItem.Click += Обновление1000ЗаписейToolStripMenuItem_Click;
// //
// удаление1000ЗаписейToolStripMenuItem // удаление1000ЗаписейToolStripMenuItem
// //
удаление1000ЗаписейToolStripMenuItem.Name = "удаление1000ЗаписейToolStripMenuItem"; удаление1000ЗаписейToolStripMenuItem.Name = "удаление1000ЗаписейToolStripMenuItem";
удаление1000ЗаписейToolStripMenuItem.Size = new Size(217, 22); удаление1000ЗаписейToolStripMenuItem.Size = new Size(277, 26);
удаление1000ЗаписейToolStripMenuItem.Text = "Удаление 1000 записей"; удаление1000ЗаписейToolStripMenuItem.Text = "Удаление 1000 записей";
удаление1000ЗаписейToolStripMenuItem.Click += Удаление1000ЗаписейToolStripMenuItem_Click; удаление1000ЗаписейToolStripMenuItem.Click += Удаление1000ЗаписейToolStripMenuItem_Click;
// //
// замерыСложныхЗапросовToolStripMenuItem
//
замерыСложныхЗапросовToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { первыйЗапросToolStripMenuItem, второйЗапросToolStripMenuItem1 });
замерыСложныхЗапросовToolStripMenuItem.Name = амерыСложныхЗапросовToolStripMenuItem";
замерыСложныхЗапросовToolStripMenuItem.Size = new Size(214, 24);
замерыСложныхЗапросовToolStripMenuItem.Text = "Замеры сложных запросов";
//
// первыйЗапросToolStripMenuItem
//
первыйЗапросToolStripMenuItem.Name = "первыйЗапросToolStripMenuItem";
первыйЗапросToolStripMenuItem.Size = new Size(224, 26);
первыйЗапросToolStripMenuItem.Text = "1 запрос";
первыйЗапросToolStripMenuItem.Click += ПервыйЗапросToolStripMenuItem_Click;
//
// второйЗапросToolStripMenuItem1
//
второйЗапросToolStripMenuItem1.Name = "второйЗапросToolStripMenuItem1";
второйЗапросToolStripMenuItem1.Size = new Size(224, 26);
второйЗапросToolStripMenuItem1.Text = "2 запрос";
второйЗапросToolStripMenuItem1.Click += ВторойЗапросToolStripMenuItem1_Click;
//
// labelTest // labelTest
// //
labelTest.BorderStyle = BorderStyle.FixedSingle; labelTest.BorderStyle = BorderStyle.FixedSingle;
labelTest.Location = new Point(156, 82); labelTest.Location = new Point(178, 109);
labelTest.Name = "labelTest"; labelTest.Name = "labelTest";
labelTest.Size = new Size(250, 100); labelTest.Size = new Size(285, 133);
labelTest.TabIndex = 3; labelTest.TabIndex = 3;
labelTest.TextAlign = ContentAlignment.MiddleCenter; labelTest.TextAlign = ContentAlignment.MiddleCenter;
// //
// FormMain // FormMain
// //
AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(554, 261); ClientSize = new Size(633, 348);
Controls.Add(labelTest); Controls.Add(labelTest);
Controls.Add(menuStrip1); Controls.Add(menuStrip1);
MainMenuStrip = menuStrip1; MainMenuStrip = menuStrip1;
Margin = new Padding(3, 4, 3, 4);
Name = "FormMain"; Name = "FormMain";
StartPosition = FormStartPosition.CenterScreen; StartPosition = FormStartPosition.CenterScreen;
Text = "Электронный дневник"; Text = "Электронный дневник";
@ -207,5 +234,8 @@
private ToolStripMenuItem получение1000ЗаписейToolStripMenuItem; private ToolStripMenuItem получение1000ЗаписейToolStripMenuItem;
private ToolStripMenuItem обновление1000ЗаписейToolStripMenuItem; private ToolStripMenuItem обновление1000ЗаписейToolStripMenuItem;
private ToolStripMenuItem удаление1000ЗаписейToolStripMenuItem; private ToolStripMenuItem удаление1000ЗаписейToolStripMenuItem;
private ToolStripMenuItem замерыСложныхЗапросовToolStripMenuItem;
private ToolStripMenuItem первыйЗапросToolStripMenuItem;
private ToolStripMenuItem второйЗапросToolStripMenuItem1;
} }
} }

View File

@ -1,11 +1,11 @@
using ElectronicDiaryAbstractions.Models; using ElectronicDiaryAbstractions.Models;
using ElectronicDiaryAbstractions.WorkAbstractions; using ElectronicDiaryAbstractions.WorkAbstractions;
using ElectronicDiaryPostgresImplementation.WorkImplementation;
namespace ElectronicDiaryView namespace ElectronicDiaryView
{ {
public partial class FormMain : Form public partial class FormMain : Form
{ {
public FormMain() public FormMain()
{ {
InitializeComponent(); InitializeComponent();
@ -165,5 +165,31 @@ namespace ElectronicDiaryView
labelTest.Text = $"Удаление 1000 строк выполнено за {(endTime - startTime).TotalMilliseconds} миллисекунд"; labelTest.Text = $"Удаление 1000 строк выполнено за {(endTime - startTime).TotalMilliseconds} миллисекунд";
} }
} }
private void ПервыйЗапросToolStripMenuItem_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(IComplexQueriesWork));
if (service is IComplexQueriesWork work)
{
DateTime startTime = DateTime.Now;
work.ExecuteFirstQuery();
DateTime endTime = DateTime.Now;
labelTest.Text = $"Первый сложный запрос (вывод всех полей БД) выполнился за {(endTime - startTime).TotalMilliseconds} миллисекунд";
}
}
private void ВторойЗапросToolStripMenuItem1_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(IComplexQueriesWork));
if (service is IComplexQueriesWork work)
{
DateTime startTime = DateTime.Now;
work.ExecuteSecondQuery();
DateTime endTime = DateTime.Now;
labelTest.Text = $"Второй сложный запрос (подсчет уроков по помещениям) выполнился за {(endTime - startTime).TotalMilliseconds} миллисекунд";
}
}
} }
} }

View File

@ -33,6 +33,7 @@ namespace ElectronicDiaryView
services.AddTransient<ISubjectWork, SubjectWork>(); services.AddTransient<ISubjectWork, SubjectWork>();
services.AddTransient<ITeacherWork, TeacherWork>(); services.AddTransient<ITeacherWork, TeacherWork>();
services.AddTransient<IUserWork, UserWork>(); services.AddTransient<IUserWork, UserWork>();
services.AddTransient<IComplexQueriesWork, ComplexQueriesWork>();
services.AddTransient<FormMain>(); services.AddTransient<FormMain>();
services.AddTransient<FormGrade>(); services.AddTransient<FormGrade>();
services.AddTransient<FormHomework>(); services.AddTransient<FormHomework>();