Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.90/40: Рейтинг темы: голосов - 40, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 25.09.2021
Сообщений: 88
MySQL

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

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

Студворк — интернет-сервис помощи студентам
Всем привет!
У меня не получается создать вывод данных авторизованного пользователя. Мучаюсь вторую неделю и много чего посмотрел, прочитал, пробовал использовать, но ничего не получилось.
Пробовал передать данные через переменную с одной формы на другую и там в запросе их сравнить, но ничего опять же не вышло.
Может кто-нибудь помочь дописать код, пожалуйста?
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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.09.2022, 08:16
Ответы с готовыми решениями:

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

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

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

123
Markiz Red Devil
 Аватар для Ludwig Valentin
171 / 296 / 26
Регистрация: 11.08.2022
Сообщений: 3,868
27.09.2022, 07:38
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от 123valik321 Посмотреть сообщение
Ludwig Valentin, не сильно помогло
Коротко объясняю как использовать DataReader.
DataReader - это класс, содержащий результаты запроса, но с правами только на чтение.
Чтобы прочитать данные надо организовать цикл по строкам и в цикле выбирать поля.
На основе полученных полей создать класс Employee и добавить его в список.
По моей ссылке есть пример, делайте аналогично.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18402 / 14334 / 5370
Регистрация: 17.03.2014
Сообщений: 29,011
Записей в блоге: 1
27.09.2022, 08:20
123valik321, давайте еще раз посмотрим на код GetEmployee (текста запроса я сократил)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    public Employee GetEmployee(string login, string password)
    {
        const string sql = @"
SELECT
...
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;
            }
        }
    }
Этот код мы собственно и можем взять за основу.
1) Копируем и вставляем его
2) Даем методу новое имя и убираем аргументы
3) Меняем текст запроса так чтобы возвращались все сотрудники
4) Убираем вызовы AddWithValue
5) В начале методе объявляем и создаем List<Employee>
6) Убираем тело третьего using и заменяем его на цикл while с вызовом dataReader.Read() (пока метод возвращает true цикл должен выполняться).
7) Создаем экземпляр Employee из dataReader через конструктор класса - new Employee(dataReader). Добавляем его в список
8) В конце метода возвращаем список
0
0 / 0 / 0
Регистрация: 25.09.2021
Сообщений: 88
27.09.2022, 16:47  [ТС]
OwenGlendower,
Цитата Сообщение от OwenGlendower Посмотреть сообщение
4) Убираем вызовы AddWithValue
5) В начале методе объявляем и создаем List<Employee>
6) Убираем тело третьего using и заменяем его на цикл while с вызовом dataReader.Read() (пока метод возвращает true цикл должен выполняться).
7) Создаем экземпляр Employee из dataReader через конструктор класса - new Employee(dataReader). Добавляем его в список
8) В конце метода возвращаем список
начиная с 4 пункта потерялся, это где должны быть эти вызовы???
5 пункт, где объявляем? во второй форме?
6 пункт, не получилось
7 пункт, не понял
8 пункт, не понял
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18402 / 14334 / 5370
Регистрация: 17.03.2014
Сообщений: 29,011
Записей в блоге: 1
27.09.2022, 17:53
123valik321, разговор пока идет только о методе GetAllEmployees
0
0 / 0 / 0
Регистрация: 25.09.2021
Сообщений: 88
27.09.2022, 19:10  [ТС]
OwenGlendower, Хорошо, так должно быть 1 по 3 пункт?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18402 / 14334 / 5370
Регистрация: 17.03.2014
Сообщений: 29,011
Записей в блоге: 1
27.09.2022, 19:27
123valik321, нет. Внимательно читайте что написано (перечеркнутное вы сделали)
1) Копируем и вставляем его
2) Даем методу новое имя и убираем аргументы
3) Меняем текст запроса так чтобы возвращались все сотрудники
Добавлено через 1 минуту
В п.2 добавлю еще момент
2) Даем методу новое имя, убираем аргументы и меняем тип возвращаемого значения на List<Employee>
0
0 / 0 / 0
Регистрация: 25.09.2021
Сообщений: 88
28.09.2022, 09:32  [ТС]
OwenGlendower, Вот так?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18402 / 14334 / 5370
Регистрация: 17.03.2014
Сообщений: 29,011
Записей в блоге: 1
28.09.2022, 12:15
123valik321, запрос верный. Уберите только вопросительный знак после List<Employee>. Он означает что метод может вернуть null, а мы не собираемся это делать.

Обновляем список действий
1) Копируем и вставляем его
2) Даем методу новое имя, убираем аргументы и меняем тип возвращаемого значения на List<Employee>
3) Меняем текст запроса так чтобы возвращались все сотрудники
4) Убираем вызовы AddWithValue
5) В начале методе объявляем и создаем List<Employee>
6) Убираем тело третьего using и заменяем его на цикл while с вызовом dataReader.Read() (пока метод возвращает true цикл должен выполняться).
7) Создаем экземпляр Employee из dataReader через конструктор класса - new Employee(dataReader). Добавляем его в список
8) В конце метода возвращаем список
P.S. На будущее - выкладывайте код текстом внутри соответствующих тегов форматирования.
1
Markiz Red Devil
 Аватар для Ludwig Valentin
171 / 296 / 26
Регистрация: 11.08.2022
Сообщений: 3,868
28.09.2022, 12:38
Цитата Сообщение от OwenGlendower Посмотреть сообщение
5) В начале методе объявляем и создаем List<Employee>
6) Убираем тело третьего using и заменяем его на цикл while с вызовом dataReader.Read() (пока метод возвращает true цикл должен выполняться).
7) Создаем экземпляр Employee из dataReader через конструктор класса - new Employee(dataReader). Добавляем его в список
Reader возвращает набор записей, а Employee один.
И потом, всё равно добавляете его в список - List<Employee>.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18402 / 14334 / 5370
Регистрация: 17.03.2014
Сообщений: 29,011
Записей в блоге: 1
28.09.2022, 12:44
Ludwig Valentin, это вы к чему?
0
Markiz Red Devil
 Аватар для Ludwig Valentin
171 / 296 / 26
Регистрация: 11.08.2022
Сообщений: 3,868
28.09.2022, 13:12
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Ludwig Valentin, это вы к чему?
Мне не совсем ясна ваша логика.
И, возможно, можно было бы обойтись без класса Employee, а заполнять grid прямо из readerа.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18402 / 14334 / 5370
Регистрация: 17.03.2014
Сообщений: 29,011
Записей в блоге: 1
28.09.2022, 13:20
Цитата Сообщение от Ludwig Valentin Посмотреть сообщение
Мне не совсем ясна ваша логика.
Моя логика очень простая. Следует разделять ответственности. Класс EmployeeRepository отвечает только за работу с БД. Форма отвечает только за UI.

Цитата Сообщение от Ludwig Valentin Посмотреть сообщение
И, возможно, можно было бы обойтись без класса Employee, а заполнять grid прямо из readerа.
Да возможно, но это плохая практика.
0
Markiz Red Devil
 Аватар для Ludwig Valentin
171 / 296 / 26
Регистрация: 11.08.2022
Сообщений: 3,868
28.09.2022, 13:25
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Да возможно, но это плохая практика.
MSDN так и советует поступать.
А лишние классы, конечно, полезная абстракция, только требуют дополнительного кодирования.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18402 / 14334 / 5370
Регистрация: 17.03.2014
Сообщений: 29,011
Записей в блоге: 1
28.09.2022, 13:49
Ludwig Valentin, если вы о примерах которые приводятся к классам и методам, это не рекомендация это именно пример. Обычно максимально простой. Хорошие правильные практики в других источниках описываются.
0
Markiz Red Devil
 Аватар для Ludwig Valentin
171 / 296 / 26
Регистрация: 11.08.2022
Сообщений: 3,868
28.09.2022, 13:56
OwenGlendower,

Я лично привык заполнять Grid по старинке. И это работало.
А те же AJAX и MVC - это бизнес, в них просто не разберёшься.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18402 / 14334 / 5370
Регистрация: 17.03.2014
Сообщений: 29,011
Записей в блоге: 1
28.09.2022, 14:04
Цитата Сообщение от Ludwig Valentin Посмотреть сообщение
Я лично привык заполнять Grid по старинке. И это работало.
Это не значит что это правильный подход.

Цитата Сообщение от Ludwig Valentin Посмотреть сообщение
А те же AJAX и MVC - это бизнес, в них просто не разберёшься.
AJAX это технология, MVC - шаблон проектирования UI приложений. К бизнесу они никак не относятся. Но если у вас с ними сложности, то могу только посочувствовать.
0
Markiz Red Devil
 Аватар для Ludwig Valentin
171 / 296 / 26
Регистрация: 11.08.2022
Сообщений: 3,868
28.09.2022, 14:13
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Это не значит что это правильный подход.
Это работающий подход. И без выкрутасов, без путаницы.

Цитата Сообщение от OwenGlendower Посмотреть сообщение
AJAX это технология, MVC - шаблон проектирования UI приложений. К бизнесу они никак не относятся. Но если у вас с ними сложности, то могу только посочувствовать.
Я работал миддлом. Писал приложения к базам данных и web-морды.
0
0 / 0 / 0
Регистрация: 25.09.2021
Сообщений: 88
28.09.2022, 17:47  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
1) Копируем и вставляем его
2) Даем методу новое имя, убираем аргументы и меняем тип возвращаемого значения на List<Employee>
3) Меняем текст запроса так чтобы возвращались все сотрудники
4) Убираем вызовы AddWithValue
5) В начале методе объявляем и создаем List<Employee>
6) Убираем тело третьего using и заменяем его на цикл while с вызовом dataReader.Read() (пока метод возвращает true цикл должен выполняться).
7) Создаем экземпляр Employee из dataReader через конструктор класса - new Employee(dataReader). Добавляем его в список
8) В конце метода возвращаем список
OwenGlendower, если мы убираем сравнение (логин и пароль) при авторизации, то как программа должна определить, какому пользователю вывести фулл таблицу, а какому нет?
Цитата Сообщение от OwenGlendower Посмотреть сообщение
5) В начале методе объявляем и создаем List<Employee>
6) Убираем тело третьего using и заменяем его на цикл while с вызовом dataReader.Read() (пока метод возвращает true цикл должен выполняться).
7) Создаем экземпляр Employee из dataReader через конструктор класса - new Employee(dataReader). Добавляем его в список
8) В конце метода возвращаем список
Разве 5 я не сделал?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18402 / 14334 / 5370
Регистрация: 17.03.2014
Сообщений: 29,011
Записей в блоге: 1
28.09.2022, 18:00
Цитата Сообщение от 123valik321 Посмотреть сообщение
если мы убираем сравнение (логин и пароль) при авторизации, то как программа должна определить, какому пользователю вывести фулл таблицу, а какому нет?
Мы не убираем сравнение при авторизации. Мы делаем новый метод для получения всех пользователей который будет вызываться после того как авторизация пройдена.

Цитата Сообщение от 123valik321 Посмотреть сообщение
Разве 5 я не сделал?
Можете показать где в вашем коде объявление переменной типа List<Employee>и её инициализация?


Добавлено через 6 минут
Цитата Сообщение от Ludwig Valentin Посмотреть сообщение
И без выкрутасов, без путаницы.
Значит вы неопытный программист раз для вас это для выкрутасы и путаница.

Цитата Сообщение от Ludwig Valentin Посмотреть сообщение
Это работающий подход.
Это беда c плохими подходами - они работают. Точнее они успешно делают вид что работают, до определенного момента. Решение с отделением логики получения данных от их отображения с использованием data binding позволяет, например, легко переставлять и скрывать колонки в DataGridView без изменения кода. Также такой код проще понимать. Ах да, я же забыл, это выкрутасы и путаница.
0
0 / 0 / 0
Регистрация: 25.09.2021
Сообщений: 88
28.09.2022, 19:09  [ТС]
OwenGlendower,
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Можете показать где в вашем коде объявление переменной типа List<Employee>и её инициализация?
, ..., нет, bruh, я уже ничего не понимаю, что и как делать(((
У меня не такой большой объем знаний и опыта в этом, как у вас

Добавлено через 23 минуты
OwenGlendower,
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
List<Employee> people = new List<Employee>();
 
        public List<Employee> GetAllEmployees(string login, string password)
        {
            const string sql = @"
            SELECT
                sotruds.id AS sotruds_id,
                sotruds.f,
                sotruds.i,
                sotruds.o,
                sotruds.address,
                sotruds.logU,
                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();
 
                while (true)
                {
                    dataReader.Read();
                }
            }
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.09.2022, 19:09

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru