C# индекс массива bool находился за пределами массива при объявлении и инициализации - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть эта функция, которая обновляет некоторую информацию в моей базе данных. Он работает должным образом до bool[] days = new bool[7]; и выдает сообщение об исключении - «индекс находится за пределами массива». Я не могу понять, как это выходит за пределы, когда я только что объявил и инициализировал это.

public static void UpdateDepartment(Department department, string oldName)
        {
            if (department!=null)
            {
                try
                {
                    using (MySqlConnection conn = new MySqlConnection(ConnectionString))
                    {
                        string query = "select * from people where department = @oldName";
                        List<User> results = new List<User>();
                        MySqlCommand cmd_refactor = new MySqlCommand(query, conn);
                        cmd_refactor.Parameters.AddWithValue("@oldName", oldName);
                        conn.Open();
                        MySqlDataReader dataReader = cmd_refactor.ExecuteReader();
                        while (dataReader.Read())
                        {                            
                            int id = int.Parse(dataReader[0].ToString());
                            string username = dataReader[1].ToString();
                            string firstName = dataReader[2].ToString();
                            string lastName = dataReader[3].ToString();
                            string email = dataReader[4].ToString();
                            string phoneNumber = dataReader[5].ToString();
                            PersonPosition position =
                                (PersonPosition)Enum.Parse(typeof(PersonPosition), dataReader[6].ToString(), true);
                            double salary = Double.Parse(dataReader[7].ToString());
                            Department departmentResult = new Department(dataReader[8].ToString());
                            ShiftType shiftType =
                                (ShiftType)Enum.Parse(typeof(ShiftType), dataReader[11].ToString(), true);
                            bool[] days = new bool[7];
                            for (int i = 0; i < 7; i++)
                            {
                                days[i] = bool.Parse(dataReader[i + 12].ToString());
                            }

                            User user = new User(username, firstName, lastName, email, position, salary, shiftType,
                                days, departmentResult, id, phoneNumber);
                            results.Add(user);
                        }
                        conn.Close();
                        foreach (var item in results)
                        {
                            conn.Open();
                            item.UserDepartment = department;
                            UpdateUser(item);
                            conn.Close();
                        }

                        query = "update departments set departmentName = @name where departmentName = @oldName";
                        MySqlCommand cmd = new MySqlCommand(query, conn);
                        cmd.Parameters.AddWithValue("@name", department.Name);
                        cmd.Parameters.AddWithValue("@oldName", oldName);
                        conn.Open();
                        cmd.ExecuteNonQuery();
                        conn.Close();
                    }
                }                
                catch (Exception e)
                {
                    MessageBox.Show(e.Message);
                    throw new NoConnectionException();
                }
            }
        }

1 Ответ

0 голосов
/ 14 апреля 2020

days[i] не может быть вне диапазона. Это должен быть другой массив в этой строке, который выдает эту ошибку: dataReader[i + 12]

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