using System; using System.Windows; using Npgsql; namespace ych { public partial class LoginWindow : Window { // Строка подключения к новой базе dbwork private readonly string _connString = "Host=edu-pg.itiscaf.ru;Port=5432;Database=dbwork;" + "Username=gaukov_dp;Password=4K62ebY72%h;"; public string UserRole { get; private set; } public LoginWindow() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { string loginInput = LoginBox.Text.Trim(); string passInput = PassBox.Password; if (string.IsNullOrEmpty(loginInput) || string.IsNullOrEmpty(passInput)) { ShowError("Заполните все поля"); return; } try { using (var conn = new NpgsqlConnection(_connString)) { conn.Open(); // Запрос к таблице users в схеме gaukov_dp string sql = "SELECT role FROM gaukov_dp.users WHERE login = @l AND password = @p"; using (var cmd = new NpgsqlCommand(sql, conn)) { cmd.Parameters.AddWithValue("l", loginInput); cmd.Parameters.AddWithValue("p", passInput); var result = cmd.ExecuteScalar(); if (result != null && result != DBNull.Value) { // Успешный вход UserRole = result.ToString(); // Логируем успешный вход LogToDatabase(loginInput, UserRole, "Успешно"); DialogResult = true; Close(); } else { // Неверные данные ShowError("Неверный логин или пароль"); LogToDatabase(loginInput, "unknown", "Ошибка входа"); } } } } catch (Exception ex) { MessageBox.Show("Ошибка БД: " + ex.Message, "Внимание"); } } private void ShowError(string msg) { ErrorText.Text = msg; ErrorText.Visibility = Visibility.Visible; PassBox.Clear(); PassBox.Focus(); } private void LogToDatabase(string login, string role, string status) { try { using (var conn = new NpgsqlConnection(_connString)) { conn.Open(); // Исправлены имена параметров: @r и @s должны совпадать с AddWithValue string sqlLog = "INSERT INTO gaukov_dp.login_logs (user_role, status, login_time) VALUES (@r, @s, NOW())"; using (var cmd = new NpgsqlCommand(sqlLog, conn)) { cmd.Parameters.AddWithValue("r", role); cmd.Parameters.AddWithValue("s", status); cmd.ExecuteNonQuery(); } } } catch { // Если лог не запишется (например, нет прав или таблицы), // мы просто игнорируем ошибку, чтобы не ломать вход пользователю } } } }