Сделал подсчет времени для сложных запросов в 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();
замерыСложныхЗапросовToolStripMenuItem = new ToolStripMenuItem();
первыйЗапросToolStripMenuItem = new ToolStripMenuItem();
второйЗапросToolStripMenuItem1 = new ToolStripMenuItem();
labelTest = new Label();
menuStrip1.SuspendLayout();
SuspendLayout();
//
// 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.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.Text = "menuStrip1";
//
@ -61,69 +66,69 @@
//
справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { предметыToolStripMenuItem, классыToolStripMenuItem, ученикиToolStripMenuItem, учителяToolStripMenuItem, домашниеЗаданияToolStripMenuItem, урокиToolStripMenuItem, оценкиToolStripMenuItem, пользователиToolStripMenuItem, учебныеПомещенияToolStripMenuItem });
справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem";
справочникиToolStripMenuItem.Size = new Size(94, 20);
справочникиToolStripMenuItem.Size = new Size(117, 24);
справочникиToolStripMenuItem.Text = "Справочники";
//
// предметыToolStripMenuItem
//
предметыToolStripMenuItem.Name = "предметыToolStripMenuItem";
предметыToolStripMenuItem.Size = new Size(192, 22);
предметыToolStripMenuItem.Size = new Size(241, 26);
предметыToolStripMenuItem.Text = "Предметы";
предметыToolStripMenuItem.Click += ПредметыToolStripMenuItem_Click;
//
// классыToolStripMenuItem
//
классыToolStripMenuItem.Name = "классыToolStripMenuItem";
классыToolStripMenuItem.Size = new Size(192, 22);
классыToolStripMenuItem.Size = new Size(241, 26);
классыToolStripMenuItem.Text = "Классы";
классыToolStripMenuItem.Click += КлассыToolStripMenuItem_Click;
//
// ученикиToolStripMenuItem
//
ученикиToolStripMenuItem.Name = "ученикиToolStripMenuItem";
ученикиToolStripMenuItem.Size = new Size(192, 22);
ученикиToolStripMenuItem.Size = new Size(241, 26);
ученикиToolStripMenuItem.Text = "Ученики";
ученикиToolStripMenuItem.Click += УченикиToolStripMenuItem_Click;
//
// учителяToolStripMenuItem
//
учителяToolStripMenuItem.Name = "учителяToolStripMenuItem";
учителяToolStripMenuItem.Size = new Size(192, 22);
учителяToolStripMenuItem.Size = new Size(241, 26);
учителяToolStripMenuItem.Text = "Учителя";
учителяToolStripMenuItem.Click += УчителяToolStripMenuItem_Click;
//
// домашниеЗаданияToolStripMenuItem
//
домашниеЗаданияToolStripMenuItem.Name = омашниеЗаданияToolStripMenuItem";
домашниеЗаданияToolStripMenuItem.Size = new Size(192, 22);
домашниеЗаданияToolStripMenuItem.Size = new Size(241, 26);
домашниеЗаданияToolStripMenuItem.Text = "Домашние задания";
домашниеЗаданияToolStripMenuItem.Click += ДомашниеЗаданияToolStripMenuItem_Click;
//
// урокиToolStripMenuItem
//
урокиToolStripMenuItem.Name = "урокиToolStripMenuItem";
урокиToolStripMenuItem.Size = new Size(192, 22);
урокиToolStripMenuItem.Size = new Size(241, 26);
урокиToolStripMenuItem.Text = "Уроки";
урокиToolStripMenuItem.Click += УрокиToolStripMenuItem_Click;
//
// оценкиToolStripMenuItem
//
оценкиToolStripMenuItem.Name = "оценкиToolStripMenuItem";
оценкиToolStripMenuItem.Size = new Size(192, 22);
оценкиToolStripMenuItem.Size = new Size(241, 26);
оценкиToolStripMenuItem.Text = "Оценки";
оценкиToolStripMenuItem.Click += ОценкиToolStripMenuItem_Click;
//
// пользователиToolStripMenuItem
//
пользователиToolStripMenuItem.Name = "пользователиToolStripMenuItem";
пользователиToolStripMenuItem.Size = new Size(192, 22);
пользователиToolStripMenuItem.Size = new Size(241, 26);
пользователиToolStripMenuItem.Text = "Пользователи";
пользователиToolStripMenuItem.Click += ПользователиToolStripMenuItem_Click;
//
// учебныеПомещенияToolStripMenuItem
//
учебныеПомещенияToolStripMenuItem.Name = "учебныеПомещенияToolStripMenuItem";
учебныеПомещенияToolStripMenuItem.Size = new Size(192, 22);
учебныеПомещенияToolStripMenuItem.Size = new Size(241, 26);
учебныеПомещенияToolStripMenuItem.Text = "Учебные помещения";
учебныеПомещенияToolStripMenuItem.Click += УчебныеПомещенияToolStripMenuItem_Click;
//
@ -131,54 +136,76 @@
//
замерВремениToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { добавление1000ЗаписейToolStripMenuItem, получение1000ЗаписейToolStripMenuItem, обновление1000ЗаписейToolStripMenuItem, удаление1000ЗаписейToolStripMenuItem });
замерВремениToolStripMenuItem.Name = амерВремениToolStripMenuItem";
замерВремениToolStripMenuItem.Size = new Size(114, 20);
замерВремениToolStripMenuItem.Size = new Size(144, 24);
замерВремениToolStripMenuItem.Text = "Замеры времени";
//
// добавление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.Click += Добавление1000ЗаписейToolStripMenuItem_Click;
//
// получение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.Click += Получение1000ЗаписейToolStripMenuItem_Click;
//
// обновление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.Click += Обновление1000ЗаписейToolStripMenuItem_Click;
//
// удаление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.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.BorderStyle = BorderStyle.FixedSingle;
labelTest.Location = new Point(156, 82);
labelTest.Location = new Point(178, 109);
labelTest.Name = "labelTest";
labelTest.Size = new Size(250, 100);
labelTest.Size = new Size(285, 133);
labelTest.TabIndex = 3;
labelTest.TextAlign = ContentAlignment.MiddleCenter;
//
// FormMain
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(554, 261);
ClientSize = new Size(633, 348);
Controls.Add(labelTest);
Controls.Add(menuStrip1);
MainMenuStrip = menuStrip1;
Margin = new Padding(3, 4, 3, 4);
Name = "FormMain";
StartPosition = FormStartPosition.CenterScreen;
Text = "Электронный дневник";
@ -207,5 +234,8 @@
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.WorkAbstractions;
using ElectronicDiaryPostgresImplementation.WorkImplementation;
namespace ElectronicDiaryView
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
@ -165,5 +165,31 @@ namespace ElectronicDiaryView
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<ITeacherWork, TeacherWork>();
services.AddTransient<IUserWork, UserWork>();
services.AddTransient<IComplexQueriesWork, ComplexQueriesWork>();
services.AddTransient<FormMain>();
services.AddTransient<FormGrade>();
services.AddTransient<FormHomework>();