Хранение записей базы данных в массив с циклом for | C # - PullRequest
0 голосов
/ 02 июня 2019

Я создаю программное обеспечение для онлайн-тестирования, используя C # winforms и SQL Server.Теперь у меня есть две таблицы (сервер SQL), одна из которых - вопрос , а другая - question_answers .Я вставляю вопросы и их ответы из базы данных в массив.У меня есть код что-то вроде этого.

public dbtest()
        {
            sqlconnection = new SqlConnection(ConnectionString);
            Query =
                "SELECT questions.id as qid, questions.question as qq FROM dbo.questions; ";
            sqlcommand = new SqlCommand(Query, sqlconnection);
            sqlconnection.Open();
            SqlDataReader sdr = sqlcommand.ExecuteReader();

            while (sdr.Read())
            {
                int quiz_id;
                bool quiz_id1 = Int32.TryParse(sdr["qid"].ToString(), out quiz_id);

                sqlconnection = new SqlConnection(ConnectionString);
                Query =
                "SELECT id, question_id, answer, is_correct FROM dbo.question_answers WHERE question_id = " + quiz_id + "  ; ";
                sqlcommand = new SqlCommand(Query, sqlconnection);
                sqlconnection.Open();
                SqlDataReader answr = sqlcommand.ExecuteReader();

                while (answr.Read())
                {
                    questions[quiz_id, 0] = sdr["qq"].ToString();
                    for (int ii = 1; ii < 5; ii++)
                    {
                        questions[quiz_id, ii] = answr["answer"].ToString();
                    }
                }
            }
        }

Мне нужен массив, чтобы сделать это так.


            questions[0, 0] = "The 2006 World Cup Football Tournament held in";
            questions[0, 1] = "France";
            questions[0, 2] = "China";
            questions[0, 3] = "*Germany";
            questions[0, 4] = "Brazil";
            //
            questions[1, 0] = "The 'Black flag' signifies";
            questions[1, 1] = "revolution/danger";
            questions[1, 2] = "*protest";
            questions[1, 3] = "truce";
            questions[1, 4] = "peace";
            //
            questions[2, 0] = "Robert Koch worked on";
            questions[2, 1] = "*tuberculosis";
            questions[2, 2] = "cholera";
            questions[2, 3] = "malaria";
            questions[2, 4] = "diabetes";

Но когда я использую для цикла , я получаютакие же записи ответов, как этот.


            questions[0, 0] = "The 2006 World Cup Football Tournament held in";
            questions[0, 1] = "France";
            questions[0, 2] = "France";
            questions[0, 3] = "France";
            questions[0, 4] = "France";
            //

Я новичок в программировании на win # от C #.И я не могу получить лучший алгоритм.Итак, у меня есть два вопроса.Первый: Как я могу исправить проблему этого кода?

                {
                    questions[quiz_id, 0] = sdr["qq"].ToString();
                    for (int ii = 1; ii < 5; ii++)
                    {
                        questions[quiz_id, ii] = answr["answer"].ToString();
                    }
                }

Второй: Существуют ли другие оптимальные решения для получения вопросов и их ответов из базы данных?Извините, если я не могу объяснить.Спасибо за ответы!

1 Ответ

0 голосов
/ 02 июня 2019

следующий код:

for (int ii = 1; ii < 5; ii++)
{
    questions[quiz_id, ii] = answr["answer"].ToString();
}

задаст тот же ответ в вопросах подмассива [0, X] с X между 1 и 4.
А затем еще один ответ в вопросах подмассива[1, X] с X между 1 и 4.
А затем еще один ответ на вопросы подмассива [2, X] с X между 1 и 4.

Вам нужно избавиться от этого ненужногоцикл.

public dbtest(){
        sqlconnection = new SqlConnection(ConnectionString);
        Query =
            "SELECT questions.id as qid, questions.question as qq FROM dbo.questions; ";
        sqlcommand = new SqlCommand(Query, sqlconnection);
        sqlconnection.Open();
        SqlDataReader sdr = sqlcommand.ExecuteReader();

        while (sdr.Read())
        {
            int quiz_id;
            bool quiz_id1 = Int32.TryParse(sdr["qid"].ToString(), out quiz_id);

            sqlconnection = new SqlConnection(ConnectionString);
            Query =
            "SELECT id, question_id, answer, is_correct FROM dbo.question_answers WHERE question_id = " + quiz_id + "  ; ";
            sqlcommand = new SqlCommand(Query, sqlconnection);
            sqlconnection.Open();
            SqlDataReader answr = sqlcommand.ExecuteReader();
            questions[quiz_id, 0] = sdr["qq"].ToString();
            var ii = 1;
            while (answr.Read())
            {
                questions[quiz_id, ii] = answr["answer"].ToString();
                ii++;
            }
        }
    }

Вы можете использовать SQL-соединение для сопоставления вопросов и ответов и просто преобразовать результирующий набор в некоторый массив.

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