0 / 0 / 0
Регистрация: 25.09.2021
Сообщений: 88
1
MySQL

Вывод данных авторизованного пользователя

25.09.2022, 08:16. Показов 7140. Ответов 123

Author24 — интернет-сервис помощи студентам
Всем привет!
У меня не получается создать вывод данных авторизованного пользователя. Мучаюсь вторую неделю и много чего посмотрел, прочитал, пробовал использовать, но ничего не получилось.
Пробовал передать данные через переменную с одной формы на другую и там в запросе их сравнить, но ничего опять же не вышло.
Может кто-нибудь помочь дописать код, пожалуйста?
1 форма
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
using MySql.Data.MySqlClient;
using System.Data;
using System.Data.Common;
using System.Windows.Forms;
using static Cafe_BK.Form2;
 
namespace Cafe_BK
{
    public partial class Form1 : Form
    {
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
 
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            String logUser = login.Text;
            String passUser = password.Text;
 
            DB db = new DB();
            DataTable table = new DataTable();
            MySqlDataAdapter adapter = new MySqlDataAdapter();
 
            MySqlCommand command = new MySqlCommand("SELECT * FROM `sotruds` WHERE `logU` = @ul AND `passU` = @uP", db.getConnection());
            command.Parameters.Add("@uL", MySqlDbType.VarChar).Value = logUser;
            command.Parameters.Add("@uP", MySqlDbType.VarChar).Value = passUser;
            adapter.SelectCommand = command;
            adapter.Fill(table);
            
 
            if (table.Rows.Count > 0)
            {
                if (table.Rows[0]["id_dolgnost"].ToString() == "1")
                {
                    databank.text = login.Text;
                    Form2 form2 = new Form2();
                    form2.Show();
                }
                else if (table.Rows[0]["id_dolgnost"].ToString() == "2")
                {
                    Form3 form3 = new Form3();
                    form3.Show();
                }
                else if (table.Rows[0]["id_dolgnost"].ToString() == "3")
                {
                    Form4 form4 = new Form4();
                    form4.Show();
                }
                else if (table.Rows[0]["id_dolgnost"].ToString() == "4, 5")
                {
                    Form5 form5 = new Form5();
                    form5.Show();
                }
                else if (table.Rows[0]["id_dolgnost"].ToString() == "6")
                {
                    Form6 form6 = new Form6();
                    form6.Show();
                }
            }
            else
                MessageBox.Show("вы не авторизованы");
        }
    }
}
Вывод данных авторизованного пользователя

2 форма
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Data.SqlClient;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
using Microsoft.VisualBasic.Logging;
using MySqlX.XDevAPI;
using System.Xml.Linq;
using NPOI.SS.Formula.Functions;
 
namespace Cafe_BK
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
            MySqlConnection con = new MySqlConnection("server=127.0.0.1;port=3306;username=root;password= ; database=BK");
            con.Open();
            MySqlDataAdapter da = new MySqlDataAdapter("SELECT sotruds.id,sotruds.f,sotruds.i,sotruds.o,sotruds.address, dolgnosti.name FROM sotruds\r\nINNER JOIN dolgnosti ON sotruds.id_dolgnost = dolgnosti.id", con);
            MySqlCommandBuilder cb = new MySqlCommandBuilder(da);
                        DataSet ds = new DataSet();
            da.Fill(ds, "sotruds");
 
            
 
            dataGridView1.DataSource = ds.Tables[0];
            label1.Text = databank.text;
 
        }
 
        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
 
        }
 
    }
}
Вывод данных авторизованного пользователя
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.09.2022, 08:16
Ответы с готовыми решениями:

Вывод данных авторизованного пользователя
Здравствуйте, помогите пожалуйста! Есть форма, на которой проходит авторизация. При успешной...

Отображение данных авторизованного пользователя
public partial class Form3 : Form { OleDbConnection DBConnection = new...

Как выводить данные авторизованного пользователя?
Здравствуйте, кто знает, как выводить данные авторизованного пользователя? Здесь я авторизуюсь...

Авторизация в приложении и отображение данных только авторизованного пользователя
Помогите пожалуйста, не могу решить проблему. Создаю приложение. Есть окно авторизации, откуда...

123
Matthias Ronald Gerard
148 / 208 / 25
Регистрация: 11.08.2022
Сообщений: 2,056
25.09.2022, 10:30 2
Открывайте форму авторизации из основного окна, при загрузке сделав его невидимым.
Данные авторизации передавайте по ссылке родительской форме перед закрытием формы авторизации, а затем включайте видимость родительской формы или запоминайте эти данные в глобальном классе.
А лучше сделайте главную форму с меню и из неё уже открывайте диалоговые окна.
Формы декларируйте глобально, а не сразу перед открытием - так ссылка на них теряется.
0
Администратор
Эксперт .NET
16989 / 13348 / 5209
Регистрация: 17.03.2014
Сообщений: 27,295
Записей в блоге: 1
25.09.2022, 11:03 3
123valik321, какую именно информацию вы хотите передать? Я начал писать вам код, но меня смутила эта строка из первой формы
C#
56
else if (table.Rows[0]["id_dolgnost"].ToString() == "4, 5")
Какой тип у id_dolgnost? Это строка или число? Если строка, то у вас плохой дизайн базы и нужно будет думать что с этим делать. Если число, то условие никогда не будет истинным.

Цитата Сообщение от Ludwig Valentin Посмотреть сообщение
Открывайте форму авторизации из основного окна, при загрузке сделав его невидимым.
Неудачный совет. ТСу требуется открывать разные формы и новая форма только усложнит решение не добавив ничего полезного.

Цитата Сообщение от Ludwig Valentin Посмотреть сообщение
А лучше сделайте главную форму с меню и из неё уже открывайте диалоговые окна.
Не похоже что ТСу это подходит.

Цитата Сообщение от Ludwig Valentin Посмотреть сообщение
Формы декларируйте глобально, а не сразу перед открытием - так ссылка на них теряется.
Не согласен. Открытые формы можно найти в коллекции Application.OpenForms. Остальные случаи можно решить через явную передачу ссылок или отношения Parent/Child. Глобальных данных лучше избегать.
0
Matthias Ronald Gerard
148 / 208 / 25
Регистрация: 11.08.2022
Сообщений: 2,056
25.09.2022, 11:06 4
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Не похоже что ТСу это подходит.
Я рассказал про правила хорошего тона при написании приложений, а остальное - проблема ТСа.

Цитата Сообщение от OwenGlendower Посмотреть сообщение
Не согласен. Открытые формы можно найти в коллекции Application.OpenForms. Остальные случаи можно решить через явную передачу ссылок или отношения Parent/Child. Глобальных данных лучше избегать.
Application и есть глобальный класс.
0
Администратор
Эксперт .NET
16989 / 13348 / 5209
Регистрация: 17.03.2014
Сообщений: 27,295
Записей в блоге: 1
25.09.2022, 11:12 5
Цитата Сообщение от Ludwig Valentin Посмотреть сообщение
Я рассказал про правила хорошего тона при написании приложений, а остальное - проблема ТСа.
Приложения бывают разные. Не каждое из них можно втиснуть в рамки "сделайте главную форму с меню и из неё уже открывайте диалоговые окна".

Цитата Сообщение от Ludwig Valentin Посмотреть сообщение
Application и есть глобальный класс.
Тут вы правы.
0
Matthias Ronald Gerard
148 / 208 / 25
Регистрация: 11.08.2022
Сообщений: 2,056
25.09.2022, 11:14 6
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Приложения бывают разные. Не каждое из них можно втиснуть в рамки "сделайте главную форму с меню и из неё уже открывайте диалоговые окна".
Это стандарт. Это интуитивно и понятно. В любом случае, лучше форма с меню, чем меню на кнопках. ОК?
0
Администратор
Эксперт .NET
16989 / 13348 / 5209
Регистрация: 17.03.2014
Сообщений: 27,295
Записей в блоге: 1
25.09.2022, 11:16 7
Цитата Сообщение от 123valik321 Посмотреть сообщение
WHERE `logU` = @ul AND `passU` = @uP
И еще вопрос вдогонку. Не первый раз вижу примеры с такими названиями колонок и параметров. Откуда вы взяли этот код?

Добавлено через 1 минуту
Цитата Сообщение от Ludwig Valentin Посмотреть сообщение
Это стандарт.
Скорее это один из стандартов.

Цитата Сообщение от Ludwig Valentin Посмотреть сообщение
В любом случае, лучше форма с меню, чем меню на кнопках.
Для формы авторизации это - не поверите - стандартное решение.
0
Matthias Ronald Gerard
148 / 208 / 25
Регистрация: 11.08.2022
Сообщений: 2,056
25.09.2022, 11:23 8
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Для формы авторизации это - не поверите - стандартное решение.
Я говорил про меню выбора диалоговых форм. Из главного окна приложения.
Для формы авторизации всегда две кнопки - Войти и Отмена.
0
Администратор
Эксперт .NET
16989 / 13348 / 5209
Регистрация: 17.03.2014
Сообщений: 27,295
Записей в блоге: 1
25.09.2022, 11:34 9
Лучший ответ Сообщение было отмечено 123valik321 как решение

Решение

Ludwig Valentin, я понял о чем вы говорили. Вы не поняли что ТСу это не подходит т.к. выбор формы делается не пользователем, а на основании данных авторизации.

123valik321, накидал вам пример. Надеюсь поможет
Form1
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
public partial class Form1 : Form
{
 
    public Form1()
    {
        InitializeComponent();
    }
 
    private void textBox1_TextChanged(object sender, EventArgs e)
    {
 
    }
 
    private void button2_Click(object sender, EventArgs e)
    {
        EmployeeRepository repository = new EmployeeRepository();
        Employee employee = repository.GetEmployee(login.Text, password.Text);
        
        if (employee == null)
        {
            MessageBox.Show("вы не авторизованы");
        }
        else
        {
            var form = CreateForm(employee);
            if (form != null)
            {
                form.Show();
            }
            else
            {
                MessageBox.Show($"Неизвестный идентификатор должности '{employee.PositionId}'");
            }
        }
    }
 
    private static Form CreateForm(Employee employee)
    {
        switch (employee.PositionId)
        {
            case PositionId.Position1: return new Form2(employee);
            case PositionId.Position2: return new Form3(employee);
            case PositionId.Position3: return new Form4(employee);
            
            case PositionId.Position4:
            case PositionId.Position5:
                return new Form5(employee);
                
            case PositionId.Position6: return new Form6(employee);
        }
        
        return null;
    }
}

Form2
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }
 
    public Form2(Employee employee)
    {
        InitializeComponent();
 
        label1.Text = employee.Login;
    }
}

EmployeeRepository
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public sealed class EmployeeRepository
{
    const string ConnectionString = "server=127.0.0.1;port=3306;username=root;password= ; database=BK";
 
    public Employee GetEmployee(string login, string password)
    {
        const string sql = @"
SELECT
    sotruds.id AS sotruds_id,
    sotruds.logU,
    sotruds.f,
    sotruds.i,
    sotruds.o,
    sotruds.address,
    dolgnosti.id AS dolgnosti_id,
    dolgnosti.name AS dolgnosti_name
FROM
    sotruds
    INNER JOIN dolgnosti ON sotruds.id_dolgnost = dolgnosti.id
WHERE
    logU = @logU
    AND passU = @passU";
 
        using (var connection = new MySqlConnection(ConnectionString))
        using (var command = new MySqlCommand(sql, connection))
        {
            command.Parameters.AddWithValue("@logU", login);
            command.Parameters.AddWithValue("@passU", password);
 
            connection.Open();
            using (var dataReader = command.ExecuteReader())
            {
                return dataReader.Read() ? new Employee(dataReader) : null;
            }
        }
    }
}

Employee
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public enum PositionId
{
    // TODO Дайте нормальные названия константам
    Position1 = 1,
    Position2 = 2,
    Position3 = 3,
    Position4 = 4,
    Position5 = 5,
    Position6 = 6
}
 
public sealed class Employee
{
    public int Id { get; }
    public string Login { get; }
    public string Surname { get; }
    public string Name { get; }
    public string Patronymic { get; }
    public string Address { get; }
    public PositionId PositionId { get; }
    public string Position { get; }
 
    public Employee(IDataRecord dataRecord)
    {
        Id = dataRecord.GetInt32(dataRecord.GetOrdinal("sotruds_id"));
        Login = dataRecord.GetString(dataRecord.GetOrdinal("logU"));
        Surname = dataRecord.GetString(dataRecord.GetOrdinal("f"));
        Name = dataRecord.GetString(dataRecord.GetOrdinal("i"));
        Patronymic = dataRecord.GetString(dataRecord.GetOrdinal("o"));
        PositionId = (PositionId)dataRecord.GetInt32(dataRecord.GetOrdinal("dolgnosti_id"));
        Position = dataRecord.GetString(dataRecord.GetOrdinal("dolgnosti_name"));
    }
}
3
Matthias Ronald Gerard
148 / 208 / 25
Регистрация: 11.08.2022
Сообщений: 2,056
25.09.2022, 11:38 10
Цитата Сообщение от OwenGlendower Посмотреть сообщение
выбор формы делается не пользователем, а на основании данных авторизации.
Слишком много вариантов, можно запутаться.
0
0 / 0 / 0
Регистрация: 25.09.2021
Сообщений: 88
25.09.2022, 11:48  [ТС] 11
Здесь я объединил две должности "повар" и "кассир-сборщик", т.к. они имею одни и те же обязанности, только в своем направлении от того же "менеджера", не знаю как правильно описать
Например, обязанность "кассир-сборщик" - это работа с кассой, наливание напитков и сборка заказа, а у "менеджера" может быть как и обязанности "повар", так и "кассир-сборщик", но и при этом у него еще свои обязанности. Только эту часть я еще не проверял, т.к. хотел сделать с начало вывод данных пользователя при авторизации.
Сейчас попробую поработать с вашим кодом, спасибо
0
Администратор
Эксперт .NET
16989 / 13348 / 5209
Регистрация: 17.03.2014
Сообщений: 27,295
Записей в блоге: 1
25.09.2022, 11:51 12
Цитата Сообщение от 123valik321 Посмотреть сообщение
Здесь я объединил две должности "повар" и "кассир-сборщик", ...
Это всё прекрасно, но я вас о другом спрашивал.
0
Matthias Ronald Gerard
148 / 208 / 25
Регистрация: 11.08.2022
Сообщений: 2,056
25.09.2022, 11:54 13
Цитата Сообщение от 123valik321 Посмотреть сообщение
Здесь я объединил две должности "повар" и "кассир-сборщик", т.к. они имею одни и те же обязанности, только в своем направлении от того же "менеджера", не знаю как правильно описать
Например, обязанность "кассир-сборщик" - это работа с кассой, наливание напитков и сборка заказа, а у "менеджера" может быть как и обязанности "повар", так и "кассир-сборщик", но и при этом у него еще свои обязанности. Только эту часть я еще не проверял, т.к. хотел сделать с начало вывод данных пользователя при авторизации.
Один набор форм и для каждого типа пользователя своё меню? - А в него входят формы 1, 2 или 1 и 2 вместе.
Хотя забюрократизировано повару компьютер на рабочем месте выдавать.
0
0 / 0 / 0
Регистрация: 25.09.2021
Сообщений: 88
25.09.2022, 11:58  [ТС] 14
Что это строка или число? это число. Я сделал объединение таблиц, чтобы оно выводило название должности

Добавлено через 3 минуты
Ludwig Valentin,
Не совсем точно понял вопрос
для каждого пользователя, в зависимости от их должности свое меню, форма 1 для всех, а форма 2 только для директора пока что делаю
0
Matthias Ronald Gerard
148 / 208 / 25
Регистрация: 11.08.2022
Сообщений: 2,056
25.09.2022, 12:03 15
Не плюхнет повар ненароком монитор в кипяток?

Добавлено через 2 минуты
Цитата Сообщение от 123valik321 Посмотреть сообщение
для каждого пользователя, в зависимости от их должности свое меню, форма 1 для всех, а форма 2 только для директора пока что делаю
Согласен
0
0 / 0 / 0
Регистрация: 25.09.2021
Сообщений: 88
25.09.2022, 12:18  [ТС] 16
OwenGlendower,
Выдает ошибку
System.InvalidOperationException: "Connection must be valid and open."
0
Администратор
Эксперт .NET
16989 / 13348 / 5209
Регистрация: 17.03.2014
Сообщений: 27,295
Записей в блоге: 1
25.09.2022, 12:21 17
123valik321, забыл открыть соединение. Добавьте connection.Open(); перед вызовом ExecuteReader.
0
0 / 0 / 0
Регистрация: 25.09.2021
Сообщений: 88
25.09.2022, 12:23  [ТС] 18
OwenGlendower,
вот файл
123.rar
старый
0
0 / 0 / 0
Регистрация: 25.09.2021
Сообщений: 88
25.09.2022, 12:34  [ТС] 19
Хорошо, сейчас попробую

Добавлено через 9 минут
OwenGlendower,
Ошибка
MySql.Data.MySqlClient.MySqlException: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.f,
sotruds.i,
sotruds.o,
sotruds.address,
dolgnosti.id AS d' at line 4"
Кстати там еще вывод таблиц должен быть
0
Администратор
Эксперт .NET
16989 / 13348 / 5209
Регистрация: 17.03.2014
Сообщений: 27,295
Записей в блоге: 1
25.09.2022, 12:44 20
Цитата Сообщение от 123valik321 Посмотреть сообщение
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.f,
Учитесь сами находить и исправлять ошибки. В исключении написано о ошибке синтаксиса в SQL. Посмотрите внимательно на запрос и подумайте где в районе .f есть ошибка.

Добавлено через 5 минут
Цитата Сообщение от 123valik321 Посмотреть сообщение
Кстати там еще вывод таблиц должен быть
Выводите, кто мешает? Вы интересовались как передавать данные о пользователе. Я вам показал как это можно сделать.
1
25.09.2022, 12:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.09.2022, 12:44
Помогаю со студенческими работами здесь

ID авторизованного пользователя
Добрый вечер, ребята просьба о помощи. Работаю с локальной базой данных в первые Мне необходимо...

Вывести поручения авторизованного пользователя
Добрый день, подскажите пожалуйста, делаю приложение на c# WF с mssql server, есть форма для...

Как переправить авторизованного пользователя с сайта на сайт
Необходимо авторизовать пользователя в одном веб-приложении и передать его в другое веб-приложение....

Для авторизованного пользователя открывается снов страница входа
Есть такая проблема. После входа в систему есть кнопка ведущая на страницу пользователя. Однако...

Вывод имени авторизованного пользователя в БД при отправке данных через форму
Добрый вечер форумчане! Тут такой возник вопрос: Как мне сделать вывод имени авторизованного...

Вывод всех статьей в профиле авторизованного пользователя
Здравствуйте, ребята подскажите как мне вывести статьи юзеру? Я хочу что-бы когда человек прошёл...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru