Не могу создать отчёт на основе базы данных в C# winforms

Рейтинг: 0Ответов: 1Опубликовано: 17.05.2023

Есть база данных, подключённая к форме. В ней есть три таблицы, на основе которых нужно создать отчёт. В отчёте выбирается таблица clients ([Номер клиента], [ФИО клиента], Услуга, [Номер парикмахера], [Пол клиента]), но вместо номера парикмахера необходимо вставить Фамилию парикмахера из таблицы employee ("Код сотрудника", "Фамилия", "Имя", "Отчество" и "Пол"). В итоге у меня есть такой код:

// Выборка данных из таблицы clients и employee
        OleDbCommand command = new OleDbCommand("SELECT clients.[Номер клиента], clients.[ФИО клиента], clients.Услуга, employee.[Фамилия], clients.[Пол клиента] FROM clients JOIN employee ON clients.[Номер парикмахмаера] = employee.[Код сотрудника]", oleDbConnection1);
        OleDbDataReader reader = command.ExecuteReader();

        // Создание нового файла Excel
        var excel = new Microsoft.Office.Interop.Excel.Application();
        Workbook workbook = excel.Workbooks.Add(Type.Missing);
        Worksheet worksheet = (Worksheet)workbook.ActiveSheet;
        worksheet.Name = "Отчет";

        // Добавление заголовков столбцов в Excel
        worksheet.Cells[1, 1] = "Номер клиента";
        worksheet.Cells[1, 2] = "ФИО клиента";
        worksheet.Cells[1, 3] = "Услуга";
        worksheet.Cells[1, 4] = "Фамилия парикмахера";
        worksheet.Cells[1, 5] = "Пол";

        // Заполнение таблицы данными из базы данных
        int row = 2;
        while (reader.Read())
        {
            worksheet.Cells[row, 1] = reader["Номер клиента"].ToString();
            worksheet.Cells[row, 2] = reader["ФИО клиента"].ToString();
            worksheet.Cells[row, 3] = reader["Услуга"].ToString();
            worksheet.Cells[row, 4] = reader["Фамилия"].ToString();
            worksheet.Cells[row, 5] = reader["Пол клиента"].ToString();
            row++;
        }

        // Форматирование таблицы
        Microsoft.Office.Interop.Excel.Range headerRange = worksheet.Range["A1", "E1"];
        headerRange.Font.Bold = true;
        headerRange.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
        headerRange.VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;

        Microsoft.Office.Interop.Excel.Range dataRange = worksheet.Range["A2", "E" + (row - 1).ToString()];
        dataRange.VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;

        // Получение текущей даты и времени
        string dateAndTime = DateTime.Now.ToString("yyyy-MM-ddTHHmmss");

        // Сохранение файла Excel на рабочем столе с датой и временем в названии
        string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
        string filePath = desktopPath + "\\Report_" + dateAndTime + ".xlsx";
        workbook.SaveAs(filePath);

        workbook.Close();
        excel.Quit();
        reader.Close();
        MessageBox.Show("Отчёт был успешно создан!");

При выполнении выдаёт ошибку: System.Data.OleDb.OleDbException: "Ошибка синтаксиса в предложении FROM." Как можно исправить?

Ответы

▲ 0

Очевидно, что ошибка в SELECT. Команда должна выглядеть как-то так:

SELECT Table1.Field1, Table2.Field1
FROM Table1 INNER JOIN Table2 ON Table1.ID = Table2.ID;

т. е. пропущено ключевое слово INNER