Top.Mail.Ru
Ответы

Проверьте пожалуйста код using System; using System.Data; using System.Data.OleDb; using System.Windows.Forms;

У меня есть код который должен создавать приложение WindowsForms и работать с БД Access.
Хочу чтобы опытные ребята как вы, указали на ошибки в нём, если они есть:


12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
 namespace DentalClinicApp 
{ 
    public partial class MainForm : Form 
    { 
        private const string ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=путь_к_моей_базе_данных.accdb;"; 
 
        public MainForm() 
        { 
            InitializeComponent(); 
            LoadQueries(); 
        } 
 
        private void LoadQueries() 
        { 
            // Загрузка доступных запросов 
            string[] queries = new string[] 
            { 
                "Запрос 1: Какое оборудование работает в поликлинике более 3 лет", 
                "Запрос 2: У какого ответственного врача оборудование работает без всякого ремонта", 
                "Запрос 3: Показать оснащенность по кабинетам (названия по алфавиту)", 
                "Запрос 4: Предоставить общую сумму, потраченную на ремонты с даты 'Дата' по дату 'Дата'", 
                "Запрос 5: Показать разницу сумм приобретения и ремонтов по каждому из видов оборудования", 
                "Запрос 6: Когда сумма ремонтов какого-то оборудования превышает сумму, потерянную на приобретение" 
            }; 
 
            queryComboBox.Items.AddRange(queries); 
        } 
 
        private void ExecuteQueryButton_Click(object sender, EventArgs e) 
        { 
            string selectedQuery = queryComboBox.SelectedItem.ToString(); 
            string query = ""; 
 
            switch (selectedQuery) 
            { 
                case "Запрос 1: Какое оборудование работает в поликлинике более 3 лет": 
                    query = "SELECT Код_оборудования, Название_оборудования FROM Оборудование WHERE Дата_приобретения < DateAdd('yyyy', -3, Date())"; 
                    break; 
                case "Запрос 2: У какого ответственного врача оборудование работает без всякого ремонта": 
                    query = "SELECT DISTINCT Ответственный_врач FROM Оборудование WHERE Код_оборудования NOT IN (SELECT Код_оборудования FROM Ремонты)"; 
                    break; 
                case "Запрос 3: Показать оснащенность по кабинетам (названия по алфавиту)": 
                    query = "SELECT Номер_кабинета, Название_кабинета, Ответственный_врач FROM Кабинеты ORDER BY Название_кабинета"; 
                    break; 
                case "Запрос 4: Предоставить общую сумму, потраченную на ремонты с даты 'Дата' по дату 'Дата'": 
                    query = "SELECT SUM(Сумма) AS Общая_сумма FROM Ремонты WHERE Дата_ремонта BETWEEN #Дата_начала# AND #Дата_конца#"; 
                    break; 
                case "Запрос 5: Показать разницу сумм приобретения и ремонтов по каждому из видов оборудования": 
                    query = "SELECT О.Название_оборудования, SUM(П.Сумма) AS Сумма_приобретения, SUM(Р.Сумма) AS Сумма_ремонта " + 
                            "FROM (Оборудование AS О INNER JOIN Приобретение AS П ON О.Код_оборудования = П.Код_оборудования) " + 
                            "LEFT JOIN Ремонты AS Р ON О.Код_оборудования = Р.Код_оборудования " + 
                            "GROUP BY О.Название_оборудования"; 
                    break; 
                case "Запрос 6: Когда сумма ремонтов какого-то оборудования превышает сумму, потерянную на приобретение": 
                    query = "SELECT О.Код_оборудования, О.Название_оборудования " + 
                            "FROM Оборудование AS О " + 
                            "INNER JOIN Ремонты AS Р ON О.Код_оборудования = Р.Код_оборудования " + 
                            "GROUP BY О.Код_оборудования, О.Название_оборудования " + 
Дополнен

Это остальная часть кода, весь не поместился сразу в вопрос :)
:
"HAVING SUM(Р.Сумма) > SUM(П.Количество * П.Цена)";
break;
}

// Выполнение запроса и отображение результатов
using (OleDbConnection connection = new OleDbConnection(ConnectionString))
{
connection.Open ();
using (OleDbCommand cmd = new OleDbCommand(query, connection))
{
OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
DataTable dataTable = new DataTable();
adapter.Fill(dataTable);

resultDataGridView.DataSource = dataTable;
}
}
}
}
}

По дате
По рейтингу
Аватар пользователя
Просветленный

я бы питон использовал

Аватар пользователя
Искусственный Интеллект

Ошибки в коде ты можешь сам найти, если протестируешь приложение. Тут можно лишь написать, как можно было бы сделать код лучше. Например, ты мог бы работать с объектами, в свой Combobox ты мог добавлять полноценные объекты с переписанным ToString-методом, и оттуда уже брать необходимую логику выполнения запросов. В этом случае можно было бы избежать ненужных цепочек switch cas'ов.