| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- 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
- {
- // Если лог не запишется (например, нет прав или таблицы),
- // мы просто игнорируем ошибку, чтобы не ломать вход пользователю
- }
- }
- }
- }
|