Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
 Аватар для Nekromio
0 / 0 / 0
Регистрация: 02.04.2019
Сообщений: 69

С приложения вместо данных в базу MySQL идёт NULL

08.08.2021, 09:57. Показов 3911. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую, при коннекте в базу уходят данные статистики пользователя, но отчего то по итогу там появляются в ячейках таблицы NULL

Кликните здесь для просмотра всего текста

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
private void addStatsUser()        //Отправка данных статистики в базу
        {
            DB db = new DB();
 
            DataTable table = new DataTable();
 
            MySqlDataAdapter adapter = new MySqlDataAdapter();
 
            MySqlCommand command = new MySqlCommand("INSERT INTO `ts_stats_tickets1` VALUES(`id` = @iD, `correct_answers` = @correct_answers, `number_attempts` = @attempt, `success_rate` = @rate);", db.getConnection());
 
            int iAttempt = 0;  //Попытки (болванака, потом доделаю)
            iAttempt = iAttempt++;  //Попытки
            command.Parameters.Add("@iD", MySqlDbType.Int32).Value = iIDs;      //ID пользователя
            string sTable = (String.Format("ts_stats_tickets{0:d}", iTicketsGlobal));
            command.Parameters.Add("@Ticket", MySqlDbType.VarChar).Value = sTable;      //Имя таблици 
            string sCorrect_answers = (String.Format("{0:d}/{1:d}", correct_answers, quection_count));
            command.Parameters.Add("@correct_answers", MySqlDbType.VarChar).Value = sCorrect_answers;   //Правильных ответов из n
            command.Parameters.Add("@attempt", MySqlDbType.Int32).Value = iAttempt;      //Количество попыток
            string sRate = (String.Format("{0:f}%", fRate));
            command.Parameters.Add("@rate", MySqlDbType.VarChar).Value = sRate;      //Процент
 
            db.openConnection();
 
            adapter.SelectCommand = command;
            adapter.Fill(table);
 
            db.closeConnection();
 
            MessageBox.Show(String.Format("Добавлены данны:\n {0:d}\n {1:s}\n {2:s}\n {3:d}\n {4:s}", iIDs, sTable, sCorrect_answers, iAttempt, sRate));
        }


Скрин таблицы прилагаю, кто знает в чём проблема?

P.S. Подскажите пожалуйста, а как сделать заглушку таблицы? Ячеек работает, а вот таблицы, что то никак не получается
Миниатюры
С приложения вместо данных в базу MySQL идёт NULL  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.08.2021, 09:57
Ответы с готовыми решениями:

Дата: В двух строках вместо дат идёт строка null, как вместо Date вернуть "-" в виде String?
На входе есть строки с датами разных форматов. Я обрабатываю их так: public static Date extractTimestampInput(String strDate){ ...

Из формы в базу данных отправляется NULL
Здравствуйте! Ситуация такая, соединение с базой есть точно, на этой же cshtml странице есть вывод данных @model...

Как вообще сделать эту базу данных онлайн.Чтобы я мог отправлять запросы из приложения в базу
Например база где нибудь строит . А приложение на компах пользователей. Пока только делаю шаги в онлайн. Знаю только что нужен...

6
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18304 / 14228 / 5368
Регистрация: 17.03.2014
Сообщений: 28,901
Записей в блоге: 1
08.08.2021, 10:35
Лучший ответ Сообщение было отмечено Nekromio как решение

Решение

Nekromio, синтаксис запроса странный какой-то. Попробуйте классический вариант. Обратите внимание что data adapter здесь не нужен.
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
private void addStatsUser()        //Отправка данных статистики в базу
{
    DB db = new DB();
 
    DataTable table = new DataTable();
 
    MySqlCommand command = new MySqlCommand("INSERT INTO `ts_stats_tickets1` (`id`, `correct_answers`, `number_attempts`, `success_rate`) VALUES(@iD, @correct_answers, @attempt, @rate);", db.getConnection());
 
    int iAttempt = 0;  //Попытки (болванака, потом доделаю)
    iAttempt = iAttempt++;  //Попытки
    
    command.Parameters.Add("@iD", MySqlDbType.Int32).Value = iIDs;      //ID пользователя
    string sCorrect_answers = (String.Format("{0:d}/{1:d}", correct_answers, quection_count));
    command.Parameters.Add("@correct_answers", MySqlDbType.VarChar).Value = sCorrect_answers;   //Правильных ответов из n
    command.Parameters.Add("@attempt", MySqlDbType.Int32).Value = iAttempt;      //Количество попыток
    string sRate = (String.Format("{0:f}%", fRate));
    command.Parameters.Add("@rate", MySqlDbType.VarChar).Value = sRate;      //Процент
 
    db.openConnection();
    command.ExecuteNonQuery();
    db.closeConnection();
 
    string sTable = (String.Format("ts_stats_tickets{0:d}", iTicketsGlobal));
    MessageBox.Show(String.Format("Добавлены данны:\n {0:d}\n {1:s}\n {2:s}\n {3:d}\n {4:s}", iIDs, sTable, sCorrect_answers, iAttempt, sRate));
}
P.S. Советую создать метод addStatsUser в классе DB и разместить там код который делает INSERT и больше ничего. А в текущем методе оставьте только бизнес логику с вызовом нового метода. И приучайтесь использовать using при работе с соединением чтобы гарантировать его закрытие в случае исключения.
1
 Аватар для Nekromio
0 / 0 / 0
Регистрация: 02.04.2019
Сообщений: 69
08.08.2021, 11:00  [ТС]
Большое спасибо, это работает. Учту ваши замечания, подскажите ещё пожалуйста по поводу заглушки для имени таблицы, так как мне необходимо делать её названия каждый раз разным и было бы удобнее сделать это заглушкой.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18304 / 14228 / 5368
Регистрация: 17.03.2014
Сообщений: 28,901
Записей в блоге: 1
08.08.2021, 11:11
Цитата Сообщение от Nekromio Посмотреть сообщение
подскажите ещё пожалуйста по поводу заглушки для имени таблицы, так как мне необходимо делать её названия каждый раз разным и было бы удобнее сделать это заглушкой.
С очень большой вероятностью - не нужно. Обычно это говорит об ошибке в проектировании БД. Объясните зачем вам это?
1
 Аватар для Nekromio
0 / 0 / 0
Регистрация: 02.04.2019
Сообщений: 69
08.08.2021, 11:20  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
С очень большой вероятностью - не нужно. Обычно это говорит об ошибке в проектировании БД. Объясните зачем вам это?
Каждый раз при старте приложения пользователю выдаётся отдельный билет с вопросами, а на каждый билет идёт своя таблица.
Подумал сделать так:
База данных
1. Таблица список пользователей (добавляется при регистрации)
2. Таблица билета номер 1
3. Таблица билета номер 2
4. Таблица билета номер 3

Но опять же у меня не было до это опыта в проектировании баз данных. По идеи билетов в бедующим может быть очень много и я не уверен, что это хорошая идея
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18304 / 14228 / 5368
Регистрация: 17.03.2014
Сообщений: 28,901
Записей в блоге: 1
08.08.2021, 11:33
Nekromio, правильно что сомневаетесь т.к. это плохое решение. Создайте для билетов отдельную таблицу с первичным ключом и ссылайтесь на неё через внешний ключ.
1
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
08.08.2021, 11:40
Если все билеты имеют одни и те же атрибуты (поля), то для них нужна единственная таблица. При этом содержимое для каждого билета будет разным.
Для привязки каждого билета к юзеру нужен связующий ключ-ссылка на id юзера.
Если билеты содержат разные вопросы, то к билету нужна еще одна таблица - таблица вопросов и ответов.
Пример:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CREATE TABLE Student(
   S_Id INT IDENTITY(1,1) PRIMARY KEY,
   S_FIO VARCHAR(MAX) NOT NULL,
   ...
)
CREATE TABLE ExamTicket(
   ET_Id INT IDENTITY(1,1) PRIMARY KEY,
   ET_S_Id INT REFERENSE Student(S_Id),
   ...
)
CREATE TABLE ExamQuest(
   EQ_Id INT IDENTITY(1,1) PRIMARY KEY,
   EQ_ET_Id INT REFERENSE ExamTicket(ET_Id),
   EQ_Text VARCHAR(MAX) NOT NULL,
   EQ_Answer VARCHAR(MAX) NOT NULL,
   ...
)
Т.е. один билет может быть "выдан" любому количеству юзеров и может содержать любое кол-во вопросов и ответов.
И каждый юзер может получить любое количество разных билетов со своими ответами на вопросы.

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

Ajax отправка данных из формы в базу mysql и вывод из базы mysql
$(function() { $('#chat_submit').click(function(e) { e.preventDefault(); var chat_name =...

Как записать в базу данных значение NULL
Есть такой код: Dim Connection As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data...

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

Записать значение null в поле c датой из программы в базу данных sql
Есть программа на с# и бд на sql. В sql есть таблица с полем типа данных date. Эта таблица заполняется из программы, но не получается...

Как передать Null в качестве параметра при инсерте в базу данных?
Подскажите как передать Null в качестве параметра при инсерте в базу данных


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
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. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru