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

Не проходит добавление в таблицу

22.11.2017, 11:45. Показов 1643. Ответов 9

Студворк — интернет-сервис помощи студентам
Имеется код добавления в базу записи, но в результате ничего в базу не добавляется. Код работает без ошибок.
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
public static void Newgame(string name)
        {
            int i;
            MySqlCommand idp = new MySqlCommand("SELECT * FROM mydb.safeinventory ORDER BY PlayerID DESC;", con);
            con.Open();
            using (MySqlDataReader reader = idp.ExecuteReader())
            {
                if (reader.HasRows)
                {
                    reader.Read();
                    id = (int)reader["PlayerID"];
                    MySqlCommand create = new MySqlCommand("INSERT INTO 'mydb'.'safeinventory' ('PlayerID') VALUES (@id);", con);
                    i = id + 1;
                    create.Parameters.AddWithValue("@id",i);
                    MessageBox.Show("id + 1");
                }
                else
                {
                    MySqlCommand create = new MySqlCommand("INSERT INTO 'mydb'.'safeinventory' ('PlayerID') VALUES (@id);", con);
                    i = 1;
                    create.Parameters.AddWithValue("@id", i);
                    MessageBox.Show("1");
                }
            }
            MySqlCommand cmd = new MySqlCommand("INSERT INTO 'mydb'.'playerlist' ('PlayerName' , 'SafeInventory_PlayerID') VALUES (@name, @playerInvId);", con);
            cmd.Parameters.AddWithValue("@name", name);
            cmd.Parameters.AddWithValue("@playerInvId",i);
            con.Close();
            playername = name;
            playerlvl = 1;
            playermoney = 0;
            payerhp_max = 100;
            payermp_max = 100;
            playerexp = 0;
            playerhp = 100;
            playermp = 100;
            MessageBox.Show("dytc");        //Проверочный MessageBox
            Mainform mn = new Mainform();
            mn.Show();
            
        }
Подскажите пожалуйста что делать, чтобы все заработало.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.11.2017, 11:45
Ответы с готовыми решениями:

Добавление записи в таблицу
уважаемые программисты доброго вам времени суток. столкнулся с такой вот проблемой: на форме имеются 4 текстбокса и 2 комбобокса в них...

Добавление колонки в таблицу БД.
Здравствуйте всем, у меня такой вопрос: мне необходимо програмно добавить, столбец в таблицу , данной БД, логического типа данных (true,...

Добавление в таблицу с autoincrement
Имеем таблицу, часть полей которых генериться на серваке. Самое простое - поле id с autoincrement. Вот мы открыли справочник, добавили пару...

9
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18304 / 14228 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
22.11.2017, 13:10
KenjiHoQ, ты создаешь команды с INSERT запросами, но не выполняешь их. Нужно вызвать ExecuteNonQuery() у команды.

Цитата Сообщение от KenjiHoQ Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            MySqlCommand idp = new MySqlCommand("SELECT * FROM mydb.safeinventory ORDER BY PlayerID DESC;", con);
            con.Open();
            using (MySqlDataReader reader = idp.ExecuteReader())
            {
                if (reader.HasRows)
                {
                    reader.Read();
                    id = (int)reader["PlayerID"];
                    ...
                }
                else
                {
                    ...
                }
            }
Странный код. Запрос возвращает все данные из таблицы mydb.safeinventory, но код почему-то читает только одну строку и только одну колонку из нее. Если тебе в самом деле нужно только одно значение, то лучше сделать так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
            MySqlCommand idp = new MySqlCommand("SELECT PlayerID FROM mydb.safeinventory ORDER BY PlayerID DESC LIMIT 1;", con);
            con.Open();
            object result = idp.ExecuteScalar();
            if (result != null)
            {
                id = (int)result;
                ...
            }
            else
            {
                ...
            }
0
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
22.11.2017, 13:11
Вижу создание команды, но не вижу, где прописан ExecuteNonQuerry();
Либо я слепой, либо его нет - тогда что должно отработать?

Не по теме:

И вот так всегда, читаешь, пишешь ответ, а кто-то с языка срывает перед тобой :D

1
0 / 0 / 1
Регистрация: 06.02.2017
Сообщений: 91
23.11.2017, 11:36  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Нужно вызвать ExecuteNonQuery() у команды
Пытаюсь вызвать
C#
1
2
3
4
5
6
7
8
9
10
11
 
if (reader.HasRows)
                {
                    reader.Read();
                    id = (int)reader["PlayerID"];
                    MySqlCommand create = new MySqlCommand("INSERT INTO 'mydb'.'safeinventory' ('PlayerID') VALUES (@id);", con);
                    i = id + 1;
                    create.Parameters.AddWithValue("@id",i);
                    create.ExecuteNonQuery();
                    MessageBox.Show("id + 1");
                }
Но говорят что уже открыт Datareader. Пытаюсь его закрыть командой
C#
1
idp.EndExecuteReader();
показывает "Отсутствует аргумент, соответствующий требуемому формальному параметру result из MySqlCommand.EndExecuteReader(IAsyncResu lt)". Посмотрел в интернете, но ничего не понял
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18304 / 14228 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
23.11.2017, 12:13
KenjiHoQ, DataReader закрывается путем вызова Close() или Dispose(), но в данном это не понадобится т.к. лучше использовать вариант с ExecuteScalar().
1
0 / 0 / 1
Регистрация: 06.02.2017
Сообщений: 91
23.11.2017, 12:36  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
ExecuteScalar().
а можно подробнее. Я что-то не понял

Добавлено через 3 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 int i;
            MySqlCommand idp = new MySqlCommand("SELECT PlayerID FROM mydb.safeinventory ORDER BY PlayerID DESC;", con);
            con.Open();
            object result = idp.ExecuteReader();
            
                if (result != null)
                 {
                    idp.ExecuteScalar();    <-----
                    id = (int) result;
                    MySqlCommand create = new MySqlCommand("INSERT INTO 'mydb'.'safeinventory' ('PlayerID') VALUES (@id);", con);
                    i = id + 1;
                    create.Parameters.AddWithValue("@id",i);
                    create.ExecuteScalar();
                    MessageBox.Show("id + 1");
                }
There is already an open DataReader associated with this Connection which must be closed first.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18304 / 14228 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
23.11.2017, 12:44
Лучший ответ Сообщение было отмечено KenjiHoQ как решение

Решение

KenjiHoQ,
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
public static void Newgame(string name)
{
    int i;
 
    MySqlCommand idp = new MySqlCommand("SELECT PlayerID FROM mydb.safeinventory ORDER BY PlayerID DESC LIMIT 1;", con);
    con.Open();
    int? result = (int?)idp.ExecuteScalar(); // Выполнение команды
    if (result != null)
    {
        id = result.Value;
        i = id + 1;
        MessageBox.Show("id + 1");
    }
    else
    {
        i = 1;
        MessageBox.Show("1");
    }
    MySqlCommand create = new MySqlCommand("INSERT INTO 'mydb'.'safeinventory' ('PlayerID') VALUES (@id);", con);
    create.Parameters.AddWithValue("@id", i);
    create.ExecuteNonQuery(); // Выполнение команды
 
    MySqlCommand cmd = new MySqlCommand("INSERT INTO 'mydb'.'playerlist' ('PlayerName' , 'SafeInventory_PlayerID') VALUES (@name, @playerInvId);", con);
    cmd.Parameters.AddWithValue("@name", name);
    cmd.Parameters.AddWithValue("@playerInvId",i);
    cmd.ExecuteNonQuery(); // Выполнение команды
    con.Close();
 
    playername = name;
    playerlvl = 1;
    playermoney = 0;
    payerhp_max = 100;
    payermp_max = 100;
    playerexp = 0;
    playerhp = 100;
    playermp = 100;
    MessageBox.Show("dytc");        //Проверочный MessageBox
    Mainform mn = new Mainform();
    mn.Show();    
}
1
0 / 0 / 1
Регистрация: 06.02.2017
Сообщений: 91
23.11.2017, 12:46  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 int i;
            MySqlCommand idp = new MySqlCommand("SELECT PlayerID FROM mydb.safeinventory ORDER BY PlayerID DESC;", con);
            con.Open();
            object result = idp.ExecuteReader();
            
                if (result != null)
                 {
                    idp.Dispose();
                    id = (int) result;
                    MySqlCommand create = new MySqlCommand("INSERT INTO 'mydb'.'safeinventory' ('PlayerID') VALUES (@id);", con);
                    i = id + 1;
                    create.Parameters.AddWithValue("@id",i);
                    create.ExecuteScalar();
                    MessageBox.Show("id + 1");
                }
Дополнительные сведения: Заданное приведение является недопустимым.
И почему-то от получает значение, хотя в бд ничего нет
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18304 / 14228 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
23.11.2017, 12:49
Цитата Сообщение от KenjiHoQ Посмотреть сообщение
Дополнительные сведения: Заданное приведение является недопустимым.
Метод ExecuteReader() возвращает MySqlDataReader. Зачем его приводить к int? Ты хоть немного думай когда пишешь код.
0
0 / 0 / 1
Регистрация: 06.02.2017
Сообщений: 91
23.11.2017, 12:51  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
C#
Спасибо. теперь буду разбираться с запросом SQL

Добавлено через 1 минуту
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Ты хоть немного думай когда пишешь код.
Пытаюсь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.11.2017, 12:51
Помогаю со студенческими работами здесь

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

Добавление данных в таблицу
Вот создаю базу данных (SQL Server Compact Edition) и таблицу: private void btnCreteDataBase_Click(object sender,...

Запрос на добавление в таблицу
Здравствуйте, у меня имеется локальная БД в ней таблица я пытаюсь заставить форму записать строку в таблицу CREATE TABLE . ( INT ...

Добавление строки таблицу БД
Привет! Есть пример из msdn о том как добавить данные в таблицу БД http://msdn.microsoft.com/ru-ru/library/5ycd1034.aspx Но если...

Добавление записей в таблицу
SqlConnection connection1 = new SqlConnection(&quot;Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\bd\\bdtest.mdf;Integrated...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru