Загрузка данных


Я изучил проект VODSTROY целиком и подготовил краткий отчёт.
Краткая структура
•	Решение: VODSTROY.sln
•	Проект: VODSTROY (TargetFramework: .NET Framework 4.7.2)
•	Количество файлов в проекте: 34 (исходники форм, DatabaseHelper, Program.cs, App.config, packages.config и т.д.)
•	Точка входа: Program.cs (запускает LoginForm)
Ключевые файлы
•	VODSTROY\VODSTROY.csproj — проектный файл с подключениями библиотек (ClosedXML, DocumentFormat.OpenXml и др.)
•	VODSTROY\Program.cs — Main запускает LoginForm
•	VODSTROY\App.config — connectionString DefaultConnection (указан локальный SQL Server Express) и binding redirects
•	VODSTROY\DatabaseHelper.cs — простой helper для работы с базой (ExecuteQuery, ExecuteNonQuery)
•	Формы: LoginForm, MainForm, RequestForm, CitizensForm, EmployeesForm, ServicesForm, ChangeStatusForm, EmployeeReportForm, ServicesReportForm и др.
•	packages.config — список NuGet пакетов
Наблюдения и замечания
1.	Подключение к базе
•	В App.config в connectionStrings указан: Data Source=WIN-IT8A2M0IA42\SQLEXPRESS;Initial Catalog=VODSTROY_DB;Integrated Security=True
•	При запуске у пользователя должна быть доступна эта база/инстанс или нужно поменять строку подключения.
2.	Безопасность паролей
•	LoginForm использует SQL-запрос SELECT COUNT(*) FROM Users WHERE Login = @login AND Password = @password
•	Параметризовано (SqlParameter), но хранение паролей в открытом виде в базе не рекомендуется. Рассмотреть хеширование паролей (bcrypt/Argon2) и сравнение хешей.
3.	DatabaseHelper
•	Удобный простой helper. Рекомендации:
•	Явно проверять ConnectionString на null и выбрасывать информативное исключение.
•	Добавить обработку транзакций, если потребуется.
•	Рассмотреть использование using для SqlDataAdapter (хотя он сам не IDisposable в более ранних версиях, но текущ код корректен).
4.	Process.Start
•	В нескольких местах (MainForm, EmployeeReportForm, ServicesReportForm) используется: Process.Start(new ProcessStartInfo(saveFileDialog.FileName) { UseShellExecute = true });
•	Это корректно для открытия файла в Windows. Проверки наличия файла и перехват исключений уже реализованы в try/catch.
5.	SQL-запросы
•	Во многих местах строится SQL с JOIN и параметрами — используется параметризация, что снижает риск SQL-инъекций.
•	Есть COUNT(*) для проверки связанных записей перед удалением — корректный подход.
6.	Пакеты и совместимость
•	В проекте используются пакеты, некоторые из них таргетированы на netstandard2.0 (ClosedXML, RecyclableMemoryStream). В csproj указаны HintPath к пакетам. Сборка прошла успешно в среде проверки.
•	App.config содержит bindingRedirects для System.* — это нормально для смешения пакетов netstandard + .NET Framework.
7.	UI-логика
•	Валидация форм реализована (ValidateInput в RequestForm и пр.). Есть обработка ошибок через MessageBox.
•	В нескольких местах используются значения Text полей как placeholders (LoginForm) — это рабочий, но не самый чистый UX; можно использовать Cue Banner API или отдельные Label/Watermark.
8.	Поиск TODO/FIXME
•	Язык репозитория проверен — явных TODO/FIXME не найдено.
9.	Сборка
•	Локальная сборка пройдена (фреймворк 4.7.2). Ошибок сборки не обнаружено.
Рекомендации / улучшения
•	Улучшить обработку строки подключения: добавить проверку на null/пустую в DatabaseHelper и логирование ошибок соединения.
•	Хранение паролей: перейти на хранение хешей (не хранить пароли в явном виде).
•	Валидация и UX: заменить текст-плейсхолдер в txtLogin на корректный Watermark или Label.
•	Логирование: добавить централизованное логирование (например, NLog/Serilog) вместо MessageBox для отладки/продуктивной среды.
•	Безопасность и права доступа: если приложение будет развёрнуто в организации, проверить права учетной записи, используемой для подключения к БД (Integrated Security может использовать привилегированную учетную запись).
•	Тесты: в проекте нет юнит-тестов — добавить тесты для логики, где возможно (DatabaseHelper можно покрыть интеграционными тестами с тестовой БД).
•	Транзакции: там, где несколько связанных запросов (в текущем коде таких немного), использовать транзакции.
Если хотите, могу:
•	Добавить проверку ConnectionString в DatabaseHelper и обработку ошибок (внести правку в DatabaseHelper.cs).
•	Реализовать хелпер для безопасного чтения паролей/хеширование (пример: BCrypt.Net), показать, как изменить LoginForm и таблицу Users.
•	Настроить базовую интеграцию логирования (Serilog) и показать пример записи в файл.
Скажите, что выполнить дальше — внести одно из улучшений (и какое именно) или предоставить более детальный анализ отдельных файлов.