18 / 13 / 5
Регистрация: 08.01.2016
Сообщений: 311
1

Не выполняются два запроса подряд

21.01.2020, 20:22. Показов 1488. Ответов 6
Метки нет (Все метки)

Ув. форумчане, помогите, пожалуйста, разобраться... Программа не выполняет два запроса подряд к mysql. Если убрать любой один из нижеприведенных запросов, то все сработает, но подряд не выполняются... Почему?

C#
1
2
3
4
5
6
7
8
9
10
11
12
                    MySqlCommand command2 = new MySqlCommand("INSERT INTO `users` (`id`, `usertel`, `password`, `username`, `kniga`, `kolstranic`) VALUES (NULL, @uL, @uP, @uN, @uB, @uK);", db.getConnection());
                    command2.Parameters.Add("@uL", MySqlDbType.VarChar).Value = login;
                    command2.Parameters.Add("@uP", MySqlDbType.VarChar).Value = password;
                    command2.Parameters.Add("@uN", MySqlDbType.VarChar).Value = username;
                    command2.Parameters.Add("@uB", MySqlDbType.VarChar).Value = kniga;
                    command2.Parameters.Add("@uK", MySqlDbType.VarChar).Value = kolstranic;
 
 
 
 
                    MySqlCommand command3 = new MySqlCommand("DELETE FROM `regbufer` WHERE `usertel` = @uL", db.getConnection());
                    command3.Parameters.Add("@uL", MySqlDbType.VarChar).Value = login;
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.01.2020, 20:22
Ответы с готовыми решениями:

Сделать подряд два запроса на один сайт
Всем привет. Задача такая, сделать подряд два запроса на один сайт. Только после первого запроса -...

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

Выполняются два скрипта при удалении
При щелчке по блоку main срабатывает алерт Главное. При щелчке по блоку close срабатывает закрыто и...

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

6
129 / 67 / 31
Регистрация: 24.07.2018
Сообщений: 787
22.01.2020, 09:12 2
Лучший ответ Сообщение было отмечено Elkatib как решение

Решение

Elkatib, я вот не вижу у тебя в коде, чтобы ты выполнял запрос. Да ты создаешь команду, объявляешь параметры, но не выполняешь саму команду.
1
18 / 13 / 5
Регистрация: 08.01.2016
Сообщений: 311
22.01.2020, 11:08  [ТС] 3
MaksimkaI, Вы абсолютно правы. Я создал команду, но не запустил ее. Добавил command2.ExecuteNonQuery() и все заработало. Спасибо Вам огромное.
Если не сложно, подскажите, пожалуйста еще кое-что...

Вышенаписанный код используется при подключении клиента к серверу. Каждое подключение выносится в отдельный поток. В этом потоке я создаю объект класса, в котором описаны базовые функции работа с БД. Вот он:
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
class DB
    {
        MySqlConnection connection = new MySqlConnection("server=localhost;port=3306;username=root;password=root;database=osnovadb");
 
        public void OpenConnection()
        {
 
            if (connection.State == System.Data.ConnectionState.Closed)
            {
                connection.Open();
            }
        }
 
        public void CloseConnection()
        {
 
            if (connection.State == System.Data.ConnectionState.Open)
            {
                connection.Clone();
            }
        }
 
        public MySqlConnection getConnection()
        {
            return connection;
        }
 
    }
Вопрос: достаточно ли мне использовать команду ExecuteNonQuery() для выполнения запросов к БД? Что будет, если 50 человек одновременно подключатся и выполнят этот запрос? Каждое соединение человека, подключившегося к серверу(интернет) будет в отдельном потоке, но в этом потоке получается, что я использую один класс, работающий с БД? Просто по Вашей подсказке я нашел аналогичный метод BeginExecuteNonQuery(), который работает асинхронно... Может лучше его использовать или нет разницы?

Заранее спасибо за помощь!
0
647 / 582 / 170
Регистрация: 17.07.2012
Сообщений: 1,648
Записей в блоге: 1
22.01.2020, 11:15 4
Цитата Сообщение от Elkatib Посмотреть сообщение
Что будет, если 50 человек одновременно подключатся и выполнят этот запрос? Каждое соединение человека, подключившегося к серверу(интернет) будет в отдельном потоке, но в этом потоке получается, что я использую один класс, работающий с БД?
Так экземпляры объектов то разные
Цитата Сообщение от Elkatib Посмотреть сообщение
Просто по Вашей подсказке я нашел аналогичный метод BeginExecuteNonQuery(), который работает асинхронно... Может лучше его использовать или нет разницы?
Используйте асинхронность с паттерном async/await
0
129 / 67 / 31
Регистрация: 24.07.2018
Сообщений: 787
22.01.2020, 11:29 5
Elkatib, изучите https://metanit.com/sharp/adonet/

Добавлено через 8 минут
Elkatib, щас вам мозг запудрю)
как я понял вы создаете типа клиентского приложения и там будет сидеть много людей (5, 10, 20, 30)

Вообще, по правильному, должно быть клиентское приложение (где работает пользователь) и еще должно быть серверное приложение.

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

Серверное приложение связывается с базой данных, достает нужную таблицу и отправляет клиентскому приложению типа: клинт на тебе твой список заказчиков.

На прямую клиентское приложение не должно работать с базой данных.

Но опять же эту тяжелые замуты по мне, но тут будет хоть какая то упорядоченность, логичность.

А так можно напрямую связываться с базой и использовать асинхронные запросы.

Добавлено через 3 минуты
Соответственно вся бизнес логика будет скрыта в серверном приложении. А клиентская часть это всего лишь пустышка, оболочка над данными.
0
18 / 13 / 5
Регистрация: 08.01.2016
Сообщений: 311
22.01.2020, 11:35  [ТС] 6
MaksimkaI, Так и есть. Я написал простенькое мобильное приложение под Android, которое связывается с моим сервером на C#, и каждое такое подключение через сокет выносится в отдельный поток, и вот уже этот поток создает объект вышеуказанного класса и использует его. Вроде работа с каждым подключившимся клиентов в отдельном потоке, но я боюсь, что все потоки (например 20 одновременных клиентов) будут использовать один объект. Да, это экземпляры класса, но соединение то в этом классе одно? Хотел уточнить, как правильно в этой ситуации поступить. Просто проверить по факту: то есть попросить 50 человек одновременно подключиться и в живую поверить код я не могу.))
0
129 / 67 / 31
Регистрация: 24.07.2018
Сообщений: 787
22.01.2020, 11:41 7
Если у вас много пользователей то я бы вообще посоветовал бы отойти от winforms(если вы его используете его), по мне это старая технология, что я и сделал и изучаю веб разработку на js

Добавлено через 2 минуты
Цитата Сообщение от Elkatib Посмотреть сообщение
Я написал простенькое мобильное приложение под Android, которое связывается с моим сервером на C#
ну если использовать так то норм должно быть, главное асинхронность
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.01.2020, 11:41
Помогаю со студенческими работами здесь

Имеются ли в последовательности два идущих подряд нулевых числа или три подряд одинаковых числа
44. Даны целые числа k, k,...,k (m=20). Имеются ли в последовательности два идущих подряд нулевых...

[XP] Некоторые скрипты выполняются из строки и не выполняются из файла без вывода ошибки
mode con cp select=65001>nul&cd.>ßä ::или ! 2>nul&@cls&>nul chcp 65001&cd.>öüотсюда net user...

Программа спрашивает у пользователя чему равны два выражения 12+3 и 19-9 и не выходит пока пользователь не даст ДВА ВЕРНЫХ ОТВЕТА ПОДРЯД. Если пользов
Программа спрашивает у пользователя чему равны два выражения 12+3 и 19-9 и не выходит пока...

Написать программу, создающую два потока, которые выполняются в одном адресном пространстве (в одном процессе)
Здравствуйте! Есть задание: Написать программу, создающую два потока, которые выполняются в одном...


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

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

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