Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/10: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Prosto_chelovek
0 / 0 / 0
Регистрация: 31.01.2019
Сообщений: 13
1

Программа ругается на cmd.ExecuteNonQuery()

14.02.2019, 16:56. Просмотров 1964. Ответов 11
Метки нет (Все метки)

Здравствуйте. Подскажите пожалуйста, где у меня ошибка в коде(ругается на cmd.ExecuteNonQuery()).
Предупреждаю сразу, что в C# я недавно(начал где - то 3-4 месяца назад), так что за неправильно сформулированные понятия прошу не пинать!
C#
1
2
3
4
5
6
7
8
9
10
11
        private void button1_Click(object sender, EventArgs e)
        {
 
            MySqlConnection conn = new MySqlConnection("server=знать вам неважно;port=3306;Database=и это тоже;uid=и это;password=и это;charset=utf8");
            conn.Open();
            MySqlCommand cmd = conn.CreateCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "set @max_msg_id = (select MAX(msg_id) from messages)+1; INSERT into messages(user, message, msg_id, date, time) values ('" + label4.Text.ToString() + "', '" + richTextBox2.Text + "', @max_msg_id, '" + DateTime.Now.ToString("yyyy-MM-dd") + "', '" + DateTime.Now.ToString("HH:mm:ss") + "')";
            cmd.ExecuteNonQuery();
            conn.Close();
        }
Заранее спасибо!
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2019, 16:56
Ответы с готовыми решениями:

Ругается на ExecuteNonQuery();
string card = "TransistorCard"; sqlConnection.Open(); using (var...

При добавлении записей в таблицу Acces программа ругается
Вот сам код using System; using System.Collections.Generic; using System.ComponentModel;...

ExecuteNonQuery возвращает -1 (
Почему то запрос не выполняется вот код: помогите плиз... public bool SaveNewCredit(Guid ID,...

ExecuteNonQuery возвращает -1
Подскажите, пожалуйста, почему ExecuteNonQuery возвращает -1? private static string connStr...

ExecuteNonQuery returns -1
Доброго времени суток! просмотрел похожие темы, решения не нашел( столкнулся с такой проблемой:...

11
OwenGlendower
Супер-модератор
Эксперт .NET
10589 / 9102 / 3882
Регистрация: 17.03.2014
Сообщений: 18,229
Записей в блоге: 1
Завершенные тесты: 2
14.02.2019, 17:24 2
Prosto_chelovek, как именно ругается?
0
netBool
281 / 275 / 157
Регистрация: 16.11.2010
Сообщений: 1,024
Записей в блоге: 9
Завершенные тесты: 5
14.02.2019, 17:27 3
Цитата Сообщение от Prosto_chelovek Посмотреть сообщение
Подскажите пожалуйста, где у меня ошибка в коде(ругается на cmd.ExecuteNonQuery())
Как ругается?

Пара замечаний по коду:

1. Насколько я помню для MySqlCommand, как и для любой SqlCommand, нужно установить Connection
C#
1
cmd.Connection = имя_sqlconnection;
2. Скопируйте сгенерированный cmd.CommandText в какой-нибудь менеджер и попробуйте выполнить, чтобы исключить ошибку в синтаксисе самого sql-запроса
0
Prosto_chelovek
0 / 0 / 0
Регистрация: 31.01.2019
Сообщений: 13
15.02.2019, 19:35  [ТС] 4
ошибка вот такая: fatal error encountered during command execution
0
15.02.2019, 19:35
OwenGlendower
Супер-модератор
Эксперт .NET
10589 / 9102 / 3882
Регистрация: 17.03.2014
Сообщений: 18,229
Записей в блоге: 1
Завершенные тесты: 2
15.02.2019, 23:22 5
Prosto_chelovek, это не весь текст ошибки. Должно быть что-то еще.

Цитата Сообщение от netBool Посмотреть сообщение
Насколько я помню для MySqlCommand, как и для любой SqlCommand, нужно установить Connection
C#
1
cmd.Connection = имя_sqlconnection;
В данном случае это лишнее т.к. используется метод MySqlConnection.CreateCommand
Цитата Сообщение от Prosto_chelovek Посмотреть сообщение
C#
6
            MySqlCommand cmd = conn.CreateCommand();
0
XIST
1145 / 855 / 118
Регистрация: 01.10.2009
Сообщений: 2,569
Записей в блоге: 1
16.02.2019, 15:41 6
Prosto_chelovek, а если убрать первый запрос? и какая версия мускула?
0
netBool
281 / 275 / 157
Регистрация: 16.11.2010
Сообщений: 1,024
Записей в блоге: 9
Завершенные тесты: 5
19.02.2019, 19:23 7
Цитата Сообщение от OwenGlendower Посмотреть сообщение
В данном случае это лишнее т.к. используется метод MySqlConnection.CreateCommand
Точно. Не заметил)
Цитата Сообщение от Prosto_chelovek Посмотреть сообщение
fatal error encountered during command execution
Как вариант, запрос выполняется слишком долго. Попробуйте задать бОльшее значение для cmd.CommandTimeout
0
Prosto_chelovek
0 / 0 / 0
Регистрация: 31.01.2019
Сообщений: 13
23.02.2019, 11:47  [ТС] 8
Все. Я частично разобрался из-за чего происходит эта ошибка. Дело было в команде, которая выглядит вот так:
SQL
1
2
3
SELECT * FROM messages;
SET @max_msg_id=(SELECT MAX(msg_id) FROM messages)+1;
INSERT INTO messages(USER, message, msg_id, DATE, TIME) VALUES ('testuser', '',@max_msg_id, '2019-02-23', '11:42:00')
Если я убираю команду set и в команде insert заменяю значение @max_msg_id например на 0, то все выполняется безупречно.
Но мне ведь именно нужно узнать максимальное значение столбца msg_id и прибавить к нему 1! Подскажите пожалуйста, как можно команду изменить?
0
OwenGlendower
Супер-модератор
Эксперт .NET
10589 / 9102 / 3882
Регистрация: 17.03.2014
Сообщений: 18,229
Записей в блоге: 1
Завершенные тесты: 2
23.02.2019, 12:17 9
Лучший ответ Сообщение было отмечено Prosto_chelovek как решение

Решение

Prosto_chelovek, проще и правильнее сделать колонку msg_id AUTO_INCREMENT. Тогда увеличение будет происходить автоматически и её вообще не нужно будет указывать в запросе.
1
pincet
1386 / 969 / 131
Регистрация: 23.07.2010
Сообщений: 5,270
23.02.2019, 12:31 10
использовать INSERT ... SELECT (если логика не допускает "дырок" в нумерации). Если дырки возможны - тогда Программа ругается на cmd.ExecuteNonQuery()
0
Prosto_chelovek
0 / 0 / 0
Регистрация: 31.01.2019
Сообщений: 13
05.03.2019, 16:20  [ТС] 11
OwenGlendower, вы мне жизнь спасли! Огромное спасибо!
0
HF
188 / 177 / 58
Регистрация: 09.09.2011
Сообщений: 665
Завершенные тесты: 19
05.03.2019, 16:47 12
Цитата Сообщение от Prosto_chelovek Посмотреть сообщение
Все. Я частично разобрался из-за чего происходит эта ошибка.
Если я убираю команду set и в команде insert заменяю значение @max_msg_id например на 0, то все выполняется безупречно.
Потому что "нельзя просто так взять и сделать" значение переменной. Для переменной требуется ещё и объявление. То есть пришлось бы ещё строку добавить вначале:

SQL
1
2
3
DECLARE @max_msg_id INT;
SET @max_msg_id=(SELECT MAX(msg_id) FROM messages)+1;
INSERT INTO messages(USER, message, msg_id, DATE, TIME) VALUES ('testuser', '',@max_msg_id, '2019-02-23', '11:42:00')
Но правильный ответ конечно же - AUTO_INCREMENT
0
05.03.2019, 16:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2019, 16:47

помогите с ExecuteNonQuery
Проблема не обновляются данные в БД .sdf. Форма справочник / грид через select вытаскивает данные...

ExecuteNonQuery непонятная ошибка
Непонятная ошибка : string payAmount =...

Почему ответ от ExecuteNonQuery -1?
int id; using (SqlConnection sqlCon = new SqlConnection(connection)) { ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru