Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
1 / 1 / 0
Регистрация: 05.10.2021
Сообщений: 268

Проблема с запросами

07.02.2023, 10:08. Показов 2141. Ответов 43
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, подскажите на счет использование аргументов в запросах.
Есть запрос, в нем интерполяция, ее нужно заменить на использование аргументов.
SQL
1
$"select id_user, login_user, password_user, is_admin from register where login_user = '{login}' and password_user = '{password}'";
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.02.2023, 10:08
Ответы с готовыми решениями:

Проблема с запросами
Имеется файл utils.js с кодом module.exports.getSteamStats = function(id){ request.get({ url:...

Проблема с запросами
Здравствуйте, возникла проблема, при отправке запроса на сервер. Вот код функции запроса и сам коллбэк: internal string Request(string...

Проблема с SQL запросами
Есть таблица сообщений, таблица пользователей и таблица связки пользователей (в таблица хранится, кто у кого в друзьях). Таблица...

43
Эксперт .NET
 Аватар для Usaga
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,427
07.02.2023, 10:12
Miristeri, так замените. У класса DbCommand есть свойство Parameters. Примеров в сети полно.
1
1 / 1 / 0
Регистрация: 05.10.2021
Сообщений: 268
07.02.2023, 10:17  [ТС]
Usaga, Не могу понять, так как в первый раз с этим сталкиваюсь, можете дать ссылку с информацией или примерно показать что должно получится?
0
643 / 338 / 139
Регистрация: 19.10.2013
Сообщений: 1,209
07.02.2023, 10:35
Miristeri, https://metanit.com/sharp/adonetcore/2.8.php
1
1 / 1 / 0
Регистрация: 05.10.2021
Сообщений: 268
07.02.2023, 10:37  [ТС]
116rus, Спасибо
0
643 / 338 / 139
Регистрация: 19.10.2013
Сообщений: 1,209
07.02.2023, 10:40
Miristeri,

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 using (SqlConnection connection = new SqlConnection("строка каподключения"))
            {
                using (SqlCommand command = new SqlCommand($"select id_user, login_user, password_user, is_admin from register where 1=1 ", connection))
                {
                    if (!string.IsNullOrEmpty(login))
                    {
                        command.CommandText = " and login=@login ";
                        command.Parameters.AddWithValue("@login", login);
                    }
                    if (!string.IsNullOrEmpty(password))
                    {
                        command.CommandText = " and password_user=@password ";
                        command.Parameters.AddWithValue("@password", password);
                    }
                }
                connection.Open();
            }
1
Эксперт .NET
 Аватар для Usaga
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,427
07.02.2023, 10:43
Цитата Сообщение от 116rus Посмотреть сообщение
where 1=1
Классика))) Сколько раз я уже этот приём видел) Сколько ещё увижу)
1
643 / 338 / 139
Регистрация: 19.10.2013
Сообщений: 1,209
07.02.2023, 10:44
Usaga, а как еще?)
1
1 / 1 / 0
Регистрация: 05.10.2021
Сообщений: 268
07.02.2023, 10:49  [ТС]
116rus, Usaga, Можете объяснить для чего мы это делаем? Случайно не для того чтобы скрыть возможность взлома нашей базы данных?
0
Эксперт .NET
 Аватар для Usaga
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,427
07.02.2023, 10:51
116rus, собрать параметры в коллекцию, а потом сформировать строку с предикатами и коллекцию с параметрами. Заглушка where 1 = 1 - реликт времен, когда делали тупо и в лоб.

Miristeri, да, для ухода от проблемы подстановки SQL в параметры. Плюс, позволяет базе переиспользовать кешированные планы запросов.
1
 Аватар для Andrey-MSK
3354 / 2240 / 388
Регистрация: 14.08.2018
Сообщений: 7,574
Записей в блоге: 4
07.02.2023, 10:59
116rus, А если создать коллекцию параметров, потом прогнать её этим
C#
1
2
3
4
5
6
7
foreach (SqlParameter parameter in sqlCommand.Parameters)
{
    if (parameter.Value == null || parameter.Value as string == "")
    {
        parameter.Value = DBNull.Value;
    }
}
и если параметр NOT NULL, то собрать, с помощью StringBuilder() или string.Format(), строку с WHERE и добавить её в конец запроса, или куда надо, перед GROUP и т.д.
1
1 / 1 / 0
Регистрация: 05.10.2021
Сообщений: 268
07.02.2023, 11:01  [ТС]
Usaga, Решил пойти по способу 116rus,. Объясните что делать System.Data.SqlClient.SqlException: "При установлении соединения с SQL Server произошла ошибка, связанная с сетью или с определенным экземпляром. Сервер не найден или недоступен. Убедитесь, что имя экземпляра указано правильно и что на SQL Server разрешены удаленные соединения. (provider: Named Pipes Provider, error: 40 - Не удалось открыть ?
0
 Аватар для Andrey-MSK
3354 / 2240 / 388
Регистрация: 14.08.2018
Сообщений: 7,574
Записей в блоге: 4
07.02.2023, 11:01
Цитата Сообщение от Miristeri Посмотреть сообщение
Объясните что делать System.Data.SqlClient.SqlException
Рассказать какая у вас СУБД.
1
1 / 1 / 0
Регистрация: 05.10.2021
Сообщений: 268
07.02.2023, 11:17  [ТС]
Andrey-MSK, Решил проблему, в результате теперь из-за этих параметров, выдает мне что нет такого пользователя.

Добавлено через 3 минуты
Andrey-MSK, В чем может быть загвоздка?
0
 Аватар для Andrey-MSK
3354 / 2240 / 388
Регистрация: 14.08.2018
Сообщений: 7,574
Записей в блоге: 4
07.02.2023, 11:17
Miristeri, Посмотреть в Debug какой запрос уходит на сервер и решить в нём проблему.
1
1 / 1 / 0
Регистрация: 05.10.2021
Сообщений: 268
07.02.2023, 11:23  [ТС]
Andrey-MSK, Usaga, Что такое 1=1 в запрос?
SQL
1
$"select id_user, login_user, password_user, is_admin from register where 1=1 "
0
 Аватар для Andrey-MSK
3354 / 2240 / 388
Регистрация: 14.08.2018
Сообщений: 7,574
Записей в блоге: 4
07.02.2023, 11:27
Miristeri, Это аналог TRUE, чтобы можно было оставить WHERE и дописать после него что надо, если вдруг понадобится. Что и делается в примере от 116rus.

Добавлено через 1 минуту
И вы так и не сказали какая у вас СУБД.
1
1 / 1 / 0
Регистрация: 05.10.2021
Сообщений: 268
07.02.2023, 11:29  [ТС]
Andrey-MSK, Usaga, Я конечно поступаю не правильно, что отправляю код кнопки войти в аккаунт, но у меня все равно не получается, о чем идет речь понятно, как написать нет, но решить проблему нужно.
Прошу пожалуйста мне помочь решить данную проблему.
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
 private void Button_Click(object sender, EventArgs e)
        {
            var loginUser = Login.Text; 
            var passwordUser = Password.Text; 
 
            SqlDataAdapter adapter = new SqlDataAdapter();
            DataTable table = new DataTable();
 
            /*string str = $"select id_user, login_user, password_user, is_admin from register where login_user = '{loginUser}' and password_user = '{passwordUser}'";           
 
            SqlCommand command = new SqlCommand(str, dataBase.getConnection());
 
            adapter.SelectCommand = command; 
            adapter.Fill(table);*/
            using (SqlConnection sqlConnection = new SqlConnection(@"Data Source = LAPTOP-0088E2LD; Initial Catalog = Bank; Integrated Security = True"))
            {
 
                using (SqlCommand command = new SqlCommand($"select id_user, login_user, password_user, is_admin from register where 1=5 ", dataBase.getConnection()))
                {
                    if (!string.IsNullOrEmpty(loginUser))
                    {
                        command.CommandText = " and login_user=@login ";
                        command.Parameters.AddWithValue("@login", loginUser);
                    }
                    if (!string.IsNullOrEmpty(passwordUser))
                    {
                        command.CommandText = " and password_user=@password ";
                        command.Parameters.AddWithValue("@password", passwordUser);
                    }
                }
                sqlConnection.Open();
            }
            
 
            if (table.Rows.Count == 1) 
            {
                var user = new checkUser(table.Rows[0].ItemArray[1].ToString(), Convert.ToBoolean(table.Rows[0].ItemArray[3]));
 
                MessageBox.Show("Вы успешно вошли!", "Успешно", MessageBoxButtons.OK, MessageBoxIcon.Information);
                MenuForm menuform = new MenuForm(user);
                this.Hide();
                menuform.ShowDialog();
            }
            else
                MessageBox.Show("Такого аккаунта не существует", "Аккаунта не существует", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
0
 Аватар для Andrey-MSK
3354 / 2240 / 388
Регистрация: 14.08.2018
Сообщений: 7,574
Записей в блоге: 4
07.02.2023, 11:33
Цитата Сообщение от Miristeri Посмотреть сообщение
where 1=5
Это что? Вам ведь написали 1 = 1.

Добавлено через 2 минуты
И зачем вам такая конструкция, если вам надо получить данные именно по паре логин + пароль. Вот по этим двум параметрам и пишите запрос.
T-SQL
1
2
3
4
5
6
SELECT
   ...
FROM
   register
WHERE
   login_user = @login AND password_user = @password
1
1 / 1 / 0
Регистрация: 05.10.2021
Сообщений: 268
07.02.2023, 11:35  [ТС]
Andrey-MSK, Я в курсе, но все равно не работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.02.2023, 11:35
Помогаю со студенческими работами здесь

VB+Access: проблема с запросами
Суть вопроса: БД на Access, 2 таблицы - первая содержит данные о предпринимателях (9 полей), вторая - данные об их торговых точках(10...

Проблема со сложными запросами
Серьёзная проблема. Работаю с Access XP. Не большая база данных, но со сложной структурой. В конце концов все данные собираются в одном...

Проблема с SQL запросами.
Ребят, я совсем отчаялся, доделываю курсовую работу, приложение в принципе готово. НО! Никак не могу составить запросы, я слаб в этом....

Проблема с SQL запросами.
Ребят, я совсем отчаялся, доделываю курсовую работу, приложение на делфи в принципе готово. НО! Никак не могу составить запросы, я слаб в...

Проблема с SQL запросами
Приветствую, киберфорумчане. В кратце опишу мою проблему. Я делаю тестовый проект для Яндекс.Лицея. Это программа на PyQT 5 и на sqlite3....


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Настройка записи справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru