С Новым годом! Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 19.06.2023
Сообщений: 15
1

Сохранение данных

19.09.2024, 07:12. Показов 536. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня такая проблема, необходимо сохранять данные после прохождения теста в отдельную таблицу. Чтобы потом можно было ее просмотреть. В теории если у меня идет так что тест заканчивается с помощью MessageBox, то возможно ли как то сделать так чтобы при нажатии на кнопку ОК результаты тестирования заносились в таблицу.
Вот сам код:
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
 
namespace PP05_2.www
{
    public partial class Obh : Form
    {
        private int currentQuestionIndex = 0; // Индекс текущего вопроса
        private Dictionary<int, int> selectedAnswers = new Dictionary<int, int>(); // Сохранение выбранных ответов (вопрос_id -> ответ_id)
        private List<PP05_2.Classiki.Question> questions = new List<PP05_2.Classiki.Question>(); // Инициализируем список вопросов
        private string connectionString = PP05_2.Classiki.Putin.SqlConnection; // Используем строку подключения из класса Putin
 
        public Obh()
        {
            InitializeComponent();
        }
 
        private void questionsBindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            this.Validate();
            this.questionsBindingSource.EndEdit();
            this.tableAdapterManager.UpdateAll(this.test6DataSet);
        }
 
        private void Obh_Load(object sender, EventArgs e)
        {
            // Загрузка данных в DataGridView и TextBox
            this.answersTableAdapter.Fill(this.test6DataSet.Answers);
            this.questionsTableAdapter.Fill(this.test6DataSet.Questions);
 
            // Загрузка всех вопросов для выбранного теста (ID теста = 3 в данном случае)
            questionsBindingSource.Filter = $"test_id = 3";
            LoadQuestions();
            ShowNextQuestion();
        }
 
        // Загрузка всех вопросов для теста
        private void LoadQuestions()
        {
            foreach (DataRow row in test6DataSet.Questions.Select("test_id = 3"))
            {
                questions.Add(new PP05_2.Classiki.Question
                {
                    QuestionId = Convert.ToInt32(row["question_id"]),
                    QuestionText = row["question_text"].ToString()
                });
            }
        }
 
        // Переход к следующему вопросу
        private void ShowNextQuestion()
        {
            // Если количество вопросов больше 14, завершаем тест
            if (currentQuestionIndex >= questions.Count || currentQuestionIndex >= 14)
            {
                FinishTest(); // Завершаем тест и показываем результат
                return;
            }
 
            int questionId = questions[currentQuestionIndex].QuestionId;
 
            // Привязка ID вопроса к текстовому полю
            question_idTextBox1.Text = questionId.ToString();  // Обновляем поле question_id
 
            // Привязка текста вопроса
            question_textTextBox.Text = questions[currentQuestionIndex].QuestionText;
 
            // Загрузка ответов на вопрос
            LoadQuestionAndAnswers(questionId);
 
            currentQuestionIndex++; // Увеличиваем индекс для следующего вопроса
        }
 
        // Загрузка вопроса и его ответов
        private void LoadQuestionAndAnswers(int questionId)
        {
            // Получаем строки с ответами по идентификатору вопроса
            DataRow[] answerRows = test6DataSet.Answers.Select($"question_id = {questionId}");
 
            if (answerRows.Length == 0)
            {
                MessageBox.Show("Ответы для данного вопроса не найдены.");
                return;
            }
 
            // Создаем таблицу для ответов
            DataTable answersTable = new DataTable();
            answersTable.Columns.Add("answer_id", typeof(int));
            answersTable.Columns.Add("question_id", typeof(int));
            answersTable.Columns.Add("answer_text", typeof(string));
 
            // Заполняем таблицу ответами
            foreach (DataRow answerRow in answerRows)
            {
                answersTable.Rows.Add(answerRow["answer_id"], answerRow["question_id"], answerRow["answer_text"]);
            }
 
            // Привязываем таблицу к DataGridView
            answersDataGridView.DataSource = answersTable;
 
            // Скрываем ненужные столбцы
            if (answersDataGridView.Columns.Contains("answer_id"))
            {
                answersDataGridView.Columns["answer_id"].Visible = false;
            }
 
            if (answersDataGridView.Columns.Contains("question_id"))
            {
                answersDataGridView.Columns["question_id"].Visible = false;
            }
        }
 
        // Обработчик выбора ответа
        private void answersDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0) // Убедимся, что клик произошел по строке
            {
                DataGridViewRow row = answersDataGridView.Rows[e.RowIndex];
 
                // Получаем значение через индекс столбца
                int answerId = Convert.ToInt32(row.Cells[0].Value); // Индекс "0" для столбца "answer_id"
 
                // Сохраняем ответ для подсчета результата
                int questionId = questions[currentQuestionIndex - 1].QuestionId;
                if (selectedAnswers.ContainsKey(questionId))
                {
                    selectedAnswers[questionId] = answerId;
                }
                else
                {
                    selectedAnswers.Add(questionId, answerId);
                }
 
                // Переход к следующему вопросу
                ShowNextQuestion();
            }
        }
 
        // Функция для завершения теста
        private void FinishTest()
        {
            
            SaveTestResult(); // Сохраняем результат теста
        }
 
        private void SaveTestResult()
        {
           
        }
    }
}
Вот как раз таки метод SaveTestResult должен сохранять это в таблицу.
Вот структура БД:
T-SQL
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
47
48
49
USE test6
 
-- Таблица для тестов
CREATE TABLE Tests (
    test_id INT PRIMARY KEY IDENTITY(1,1),
    test_name VARCHAR(100) NOT NULL
);
 
-- Таблица для вопросов с добавленным полем test_id
CREATE TABLE Questions (
    question_id INT PRIMARY KEY IDENTITY(1,1),
    test_id INT,
    question_text TEXT NOT NULL,
    FOREIGN KEY (test_id) REFERENCES Tests(test_id) ON DELETE CASCADE
);
 
-- Таблица для ответов
CREATE TABLE Answers (
    answer_id INT PRIMARY KEY IDENTITY(1,1),
    question_id INT,
    answer_text TEXT NOT NULL,
    FOREIGN KEY (question_id) REFERENCES Questions(question_id) ON DELETE CASCADE
);
 
-- Таблица для оценок ответов
CREATE TABLE Scores (
    score_id INT PRIMARY KEY IDENTITY(1,1),
    answer_id INT,
    score INT NOT NULL,
    FOREIGN KEY (answer_id) REFERENCES Answers(answer_id) ON DELETE CASCADE
);
 
-- Таблица для сотрудников с добавленным полем role
CREATE TABLE Employees (
    employee_id INT PRIMARY KEY IDENTITY(1,1),
    login VARCHAR(50) NOT NULL UNIQUE,  -- Уникальное ограничение на поле login
    role VARCHAR(50) NOT NULL
);
 
-- Таблица для прохождения тестов сотрудниками, с добавлением поля role
CREATE TABLE EmployeeTests (
    employee_test_id INT PRIMARY KEY IDENTITY(1,1),
    login VARCHAR(50) NOT NULL,
    test_id INT,
    test_date DATETIME NOT NULL DEFAULT GETDATE(),
    role VARCHAR(50) NOT NULL,
    FOREIGN KEY (login) REFERENCES Employees(login) ON DELETE CASCADE,
    FOREIGN KEY (test_id) REFERENCES Tests(test_id) ON DELETE CASCADE
);
Сохранение должно происходить в таблицу EmployeeTests
Кто сможет помочь буду рад сотрудничать
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.09.2024, 07:12
Ответы с готовыми решениями:

Сохранение данных
Есть ли какие-то способы сохранить данные в C# при выходе и их подгрузку при входе кроме создания...

Сохранение данных
Здравствуйте, дорогие форумчане. Назрел такой вопрос, мне нужно постоянно сохранять некоторый...

Сохранение данных из формы
Попыталась сохранить данные из формы в текстовый файл,а рисунки сохранить как БМП файлы.ПРи попытки...

Сохранение данных в файл
Нужно сохранить данные в файл (коллекция)

Сохранение данных в файле
Доброго времени суток. Появилось необходимость сохранять данные класса в файл. Я записывал так:...

1
Эксперт .NET
12512 / 8698 / 1311
Регистрация: 21.01.2016
Сообщений: 32,690
19.09.2024, 07:14 2
Цитата Сообщение от SiZuru Посмотреть сообщение
то возможно ли как то сделать так чтобы при нажатии на кнопку ОК результаты тестирования заносились в таблицу
INSERT INTO ... VALUES
1
19.09.2024, 07:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.09.2024, 07:14
Помогаю со студенческими работами здесь

Сохранение данных в exe
Подскажите вот я сделал программу но я никак не могу придумать как сделать чтобы при активации...

Сохранение данных в переменную
Всем привет! возможно глупый вопрос...но не могу додуматься. как записывать предыдущее значение в...

Сохранение данных в файл
Как написать программу чтобы она сохраняла данные в фа ил!

Сохранение данных из DGV в Excel
ещё раз здравствуйте. на заключительной стадии своего проекта, появилась необходимость сохранять...

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru