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

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

25.09.2022, 08:16. Показов 9632. Ответов 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
Valechka-Думай о Высоком
 Аватар для Ludwig Valentin
171 / 290 / 26
Регистрация: 11.08.2022
Сообщений: 3,715
27.09.2022, 07:38
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от 123valik321 Посмотреть сообщение
Ludwig Valentin, не сильно помогло
Коротко объясняю как использовать DataReader.
DataReader - это класс, содержащий результаты запроса, но с правами только на чтение.
Чтобы прочитать данные надо организовать цикл по строкам и в цикле выбирать поля.
На основе полученных полей создать класс Employee и добавить его в список.
По моей ссылке есть пример, делайте аналогично.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18346 / 14272 / 5370
Регистрация: 17.03.2014
Сообщений: 28,948
Записей в блоге: 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
18346 / 14272 / 5370
Регистрация: 17.03.2014
Сообщений: 28,948
Записей в блоге: 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
18346 / 14272 / 5370
Регистрация: 17.03.2014
Сообщений: 28,948
Записей в блоге: 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
18346 / 14272 / 5370
Регистрация: 17.03.2014
Сообщений: 28,948
Записей в блоге: 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
Valechka-Думай о Высоком
 Аватар для Ludwig Valentin
171 / 290 / 26
Регистрация: 11.08.2022
Сообщений: 3,715
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
18346 / 14272 / 5370
Регистрация: 17.03.2014
Сообщений: 28,948
Записей в блоге: 1
28.09.2022, 12:44
Ludwig Valentin, это вы к чему?
0
Valechka-Думай о Высоком
 Аватар для Ludwig Valentin
171 / 290 / 26
Регистрация: 11.08.2022
Сообщений: 3,715
28.09.2022, 13:12
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Ludwig Valentin, это вы к чему?
Мне не совсем ясна ваша логика.
И, возможно, можно было бы обойтись без класса Employee, а заполнять grid прямо из readerа.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18346 / 14272 / 5370
Регистрация: 17.03.2014
Сообщений: 28,948
Записей в блоге: 1
28.09.2022, 13:20
Цитата Сообщение от Ludwig Valentin Посмотреть сообщение
Мне не совсем ясна ваша логика.
Моя логика очень простая. Следует разделять ответственности. Класс EmployeeRepository отвечает только за работу с БД. Форма отвечает только за UI.

Цитата Сообщение от Ludwig Valentin Посмотреть сообщение
И, возможно, можно было бы обойтись без класса Employee, а заполнять grid прямо из readerа.
Да возможно, но это плохая практика.
0
Valechka-Думай о Высоком
 Аватар для Ludwig Valentin
171 / 290 / 26
Регистрация: 11.08.2022
Сообщений: 3,715
28.09.2022, 13:25
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Да возможно, но это плохая практика.
MSDN так и советует поступать.
А лишние классы, конечно, полезная абстракция, только требуют дополнительного кодирования.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18346 / 14272 / 5370
Регистрация: 17.03.2014
Сообщений: 28,948
Записей в блоге: 1
28.09.2022, 13:49
Ludwig Valentin, если вы о примерах которые приводятся к классам и методам, это не рекомендация это именно пример. Обычно максимально простой. Хорошие правильные практики в других источниках описываются.
0
Valechka-Думай о Высоком
 Аватар для Ludwig Valentin
171 / 290 / 26
Регистрация: 11.08.2022
Сообщений: 3,715
28.09.2022, 13:56
OwenGlendower,

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

Цитата Сообщение от Ludwig Valentin Посмотреть сообщение
А те же AJAX и MVC - это бизнес, в них просто не разберёшься.
AJAX это технология, MVC - шаблон проектирования UI приложений. К бизнесу они никак не относятся. Но если у вас с ними сложности, то могу только посочувствовать.
0
Valechka-Думай о Высоком
 Аватар для Ludwig Valentin
171 / 290 / 26
Регистрация: 11.08.2022
Сообщений: 3,715
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
18346 / 14272 / 5370
Регистрация: 17.03.2014
Сообщений: 28,948
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
сукцессия 37. Внедрил дипсик в свой оркестр из ИИ. У него закончилось пространство чата, потому опубликую выводы из его работы здесь
anaschu 21.07.2026
==================================================================== КОНТЕКСТ: Моделирование микоризной сукцессии (AM → ECM) ==================================================================== . . .
сукцессия 36. Делаю прогоны модели около порога бифуркации (превращения эндо микоризы в экто микоризу)
anaschu 21.07.2026
СУКЦЕССИЯ МИКОРИЗ: КАК МАТЕМАТИКА ОБЪЯСНЯЕТ ПОДЗЕМНУЮ ВОЙНУ Мы привыкли думать, что лес — это деревья. А грибы — это то, что мы собираем в корзинку осенью. Но если заглянуть под землю, окажется,. . .
ИИ и человечность
kumehtar 21.07.2026
Забавно, что общаясь с ИИ, я замечаю, насколько он высказывается умно, и насколько верит в людей. Он умеет прощать. Он знает как отвечать не обесценивая опыт других людей, даже если сам не верит. Он. . .
Нейтральные знания ..., ... чистая наука. Пока что-то проходит модерацию на Хабре, стоит развить мысль ...
Hrethgir 20.07.2026
К таким радикальным взглядам я конечно в той публикации не приходил, но чтобы скоротать вечер, решил углубиться немного. 1. Почему показания термометра заряжены целью? Цель заложена в самом. . .
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ По ссылке 403. Не очень информативно такую ссылку постить. Запись от Usaga размещена Сегодня в 06:46 . . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru