LoginWindow.xaml.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using System;
  2. using System.Windows;
  3. using Npgsql;
  4. namespace ych
  5. {
  6. public partial class LoginWindow : Window
  7. {
  8. // Строка подключения к новой базе dbwork
  9. private readonly string _connString =
  10. "Host=edu-pg.itiscaf.ru;Port=5432;Database=dbwork;" +
  11. "Username=gaukov_dp;Password=4K62ebY72%h;";
  12. public string UserRole { get; private set; }
  13. public LoginWindow()
  14. {
  15. InitializeComponent();
  16. }
  17. private void Button_Click(object sender, RoutedEventArgs e)
  18. {
  19. string loginInput = LoginBox.Text.Trim();
  20. string passInput = PassBox.Password;
  21. if (string.IsNullOrEmpty(loginInput) || string.IsNullOrEmpty(passInput))
  22. {
  23. ShowError("Заполните все поля");
  24. return;
  25. }
  26. try
  27. {
  28. using (var conn = new NpgsqlConnection(_connString))
  29. {
  30. conn.Open();
  31. // Запрос к таблице users в схеме gaukov_dp
  32. string sql = "SELECT role FROM gaukov_dp.users WHERE login = @l AND password = @p";
  33. using (var cmd = new NpgsqlCommand(sql, conn))
  34. {
  35. cmd.Parameters.AddWithValue("l", loginInput);
  36. cmd.Parameters.AddWithValue("p", passInput);
  37. var result = cmd.ExecuteScalar();
  38. if (result != null && result != DBNull.Value)
  39. {
  40. // Успешный вход
  41. UserRole = result.ToString();
  42. // Логируем успешный вход
  43. LogToDatabase(loginInput, UserRole, "Успешно");
  44. DialogResult = true;
  45. Close();
  46. }
  47. else
  48. {
  49. // Неверные данные
  50. ShowError("Неверный логин или пароль");
  51. LogToDatabase(loginInput, "unknown", "Ошибка входа");
  52. }
  53. }
  54. }
  55. }
  56. catch (Exception ex)
  57. {
  58. MessageBox.Show("Ошибка БД: " + ex.Message, "Внимание");
  59. }
  60. }
  61. private void ShowError(string msg)
  62. {
  63. ErrorText.Text = msg;
  64. ErrorText.Visibility = Visibility.Visible;
  65. PassBox.Clear();
  66. PassBox.Focus();
  67. }
  68. private void LogToDatabase(string login, string role, string status)
  69. {
  70. try
  71. {
  72. using (var conn = new NpgsqlConnection(_connString))
  73. {
  74. conn.Open();
  75. // Исправлены имена параметров: @r и @s должны совпадать с AddWithValue
  76. string sqlLog = "INSERT INTO gaukov_dp.login_logs (user_role, status, login_time) VALUES (@r, @s, NOW())";
  77. using (var cmd = new NpgsqlCommand(sqlLog, conn))
  78. {
  79. cmd.Parameters.AddWithValue("r", role);
  80. cmd.Parameters.AddWithValue("s", status);
  81. cmd.ExecuteNonQuery();
  82. }
  83. }
  84. }
  85. catch
  86. {
  87. // Если лог не запишется (например, нет прав или таблицы),
  88. // мы просто игнорируем ошибку, чтобы не ломать вход пользователю
  89. }
  90. }
  91. }
  92. }