Премини към съдържанието
  • Добре дошли!

    Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

    Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

     

C# Индексът е извън диапазона


Препоръчан отговор

Здравейте! Следният код е част от програма, която е за продаване на автомобили. (в игра). Идеята е следната: При натискане на бутона се пише шаси номера на автомобила, примерно: AAAHD, спрямо шасито се проверява базата данни и където отговаря това шаси се изтрива от таблицата и играчът получава пари. Кодът работи, но получавам грешка в лог файловете на програмата ми. Аз не виждам грешка, но ако може някой по-разбиращ да види кода ще съм благодарен :) 

Грешката е следната: Индексът е извън диапазона. Индексът трябва да бъде положително число, а размерът му не трябва да надвишава размера на колекцията.
Име на параметър: индекс System.ArgumentOutOfRangeException

 

if (InAuto == true)
                {
                    switch (BTT.ClickID)
                    {
                        case 131:
                            {
                                for (int i = 0; i <= Conn.CarType.Count; i++)
                                {
                                    if (Conn.CarChassis[i] == BTT.Text)
                                    {
                                        if (Conn.CarOwner[i] == Conn.Username)
                                        {
                                            if (Conn.CarPrice[i] > 0)
                                            {
                                                SqlInfo.SQL.RemoveCar(BTT.Text);
                                                Connections[GetConnIdx(BTT.UCID)].Cash += Conn.CarPrice[i];
                                                Msg(Connections[GetConnIdx(BTT.UCID)].PlayerName + " sold [" + BTT.Text + "] " + Conn.CarType[i]);
                                                Msg("Get: ^7" + Conn.CarPrice[i]);
                                                Connections[GetConnIdx(BTT.UCID)].Cars.Remove(Connections[GetConnIdx(Conn.UniqueID)].CarType[i]);
                                                Connections[GetConnIdx(BTT.UCID)].CarOwner.Remove(Connections[GetConnIdx(Conn.UniqueID)].CarOwner[i]);    
                                                Connections[GetConnIdx(BTT.UCID)].CarChassis.Remove(Connections[GetConnIdx(Conn.UniqueID)].CarChassis[i]);
                                                Connections[GetConnIdx(BTT.UCID)].CarPrice.Remove(Connections[GetConnIdx(Conn.UniqueID)].CarPriice[i]);
                                                Connections[GetConnIdx(BTT.UCID)].CarType.Remove(Connections[GetConnIdx(Conn.UniqueID)].CarType[i]);
                                            }
                                            else
                                            {
                                                Msg("ERROR!!");
                                            }
                                        }
                                    }
                                }
                            }
                            break;

 

Линк към коментара
Сподели в други сайтове

преди 1 час, ined написа:
for (int i = 0; i < Conn.CarType.Count; i++)
                                

Не трябва ли да е само <  , а не <= ?

Да, точно така е. Благодаря ти много, жив и здрав! 😇

Линк към коментара
Сподели в други сайтове

Здравейте! Не знам дали е уместно да питам тук, но имам проблем с SQL връзката с програмата, която се мъча да подкарам и да я свържа с компютърна игра, ако може малко за помощ, не знам къде бъркам в кода.. Кода работи, но се претоварва и започва едно забавяне на обратната връзка и не успява да обнявява на време данните на играча от sql-a и нещата се появяват с 10 сек. забавяне в играта при наличие на повече играчи (10 на брой) по-малко от 10 играча нямам проблем... Търся грешка в кода си, но не намирам просто вие сте мии последната надежда....

        public bool GetUser(ref clsConnection c)
        {
            try
            {
                MySqlConnection connect = new MySqlConnection(connectionMysql);
                connect.Open();
                MySqlCommand query = new MySqlCommand("SELECT * FROM Users WHERE User_Name='" + Escape(c.Username) + "'", connect);
                query.Prepare();
                MySqlDataReader dr = query.ExecuteReader();
                if (dr.Read())
                {
                    c.Username = dr[1].ToString();
                    c.NoColPlyName = dr[2].ToString();
                    c.Cash = double.Parse(dr[3].ToString());
                    c.Password = dr[4].ToString();
                }
                else
                {
                    dr.Close();
                    connect.Close();
                    return false;
                }
                dr.Close();
                connect.Close();
                return true;
            }
        }
        public void UpdateUser(clsConnection u)
        {
            MySqlConnection cn = new MySqlConnection(connectionMysql);
            try
            {
                if (u.Username != "")
                {
                    cn.Open();
                    MySqlCommand query = new MySqlCommand(@"UPDATE Users SET [email protected]_Name,[email protected]_PlyName,[email protected]_Cash,[email protected]_Password WHERE User_Name='" + Escape(u.Username) + "';", cn);
                    if (query != null)
                    {
                        query.Parameters.AddWithValue("@User_Name", Escape(u.Username));
                        query.Parameters.AddWithValue("@User_PlyName", Escape(u.NoColPlyName));
                        query.Parameters.AddWithValue("@User_Cash", u.Cash);
                        query.Parameters.AddWithValue("@User_Passowrd", u.Password);
                        cn.Close();
                        return;
                    }
                    else
                    {
                        return;
                    }
                }
            }
        }
        public void AddUser(clsConnection c)
        {
            try
            {
                if (c.Username != "")
                {
                    Query(@"INSERT INTO Users (User_Name,User_PlayerName,User_Cash,User_Passowrd) VALUES ('" +
                        Escape(c.Username) + "', '" +
                        Escape(c.NoColPlyName) + "', '" +
                        c.Cash + "', '" +
                        Espace(c.Passoword) + "');");
                }
            }
        }

 

Линк към коментара
Сподели в други сайтове

Ако са тествани по отделно тези базови функции на системата GetUser(), UpdateUser(), AddUser()
и в тях не възникват проблеми, трябва да се проследи работата на системата като цяло.

Първо да се види къде, кога и какво става по време на изпълнение на програмата.
После да се локализира ако има проблемно място, където и когато точно се забавя.

Може да се сложи на някои места в програмата тестов изход, който да показва какво прави в момента SQL сървъра.
Например в програмата тук-там да се подава SQL заявка с командата "SHOW STATUS" която връща таблица с променливи
на състоянието на сървъра:

+--------------------------+------------+
| Variable_name            | Value      |
+--------------------------+------------+
| Aborted_clients          | 0          |
| Aborted_connects         | 0          |
| Bytes_received           | 155372598  |
| Bytes_sent               | 1176560426 |
| Connections              | 30023      |
| Created_tmp_disk_tables  | 0          |
| Created_tmp_tables       | 8340       |
| Created_tmp_files        | 60         |
...
| Open_tables              | 1          |
| Open_files               | 2          |
| Open_streams             | 0          |
| Opened_tables            | 44600      |
| Questions                | 2026873    |
...
| Table_locks_immediate    | 1920382    |
| Table_locks_waited       | 0          |
| Threads_cached           | 0          |
| Threads_created          | 30022      |
| Threads_connected        | 1          |
| Threads_running          | 1          |
| Uptime                   | 80380      |
+--------------------------+------------+

И после да се види има ли разлика в моментите, когато програмата се бави, 
в сравнение с моментите, когато не се бави.
 

Линк към коментара
Сподели в други сайтове

преди 31 минути, NVJ написа:

Ако са тествани по отделно тези базови функции на системата GetUser(), UpdateUser(), AddUser()
и в тях не възникват проблеми, трябва да се проследи работата на системата като цяло.

Първо да се види къде, кога и какво става по време на изпълнение на програмата.
После да се локализира ако има проблемно място, където и когато точно се забавя.

Може да се сложи на някои места в програмата тестов изход, който да показва какво прави в момента SQL сървъра.
Например в програмата тук-там да се подава SQL заявка с командата "SHOW STATUS" която връща таблица с променливи
на състоянието на сървъра:

+--------------------------+------------+
| Variable_name            | Value      |
+--------------------------+------------+
| Aborted_clients          | 0          |
| Aborted_connects         | 0          |
| Bytes_received           | 155372598  |
| Bytes_sent               | 1176560426 |
| Connections              | 30023      |
| Created_tmp_disk_tables  | 0          |
| Created_tmp_tables       | 8340       |
| Created_tmp_files        | 60         |
...
| Open_tables              | 1          |
| Open_files               | 2          |
| Open_streams             | 0          |
| Opened_tables            | 44600      |
| Questions                | 2026873    |
...
| Table_locks_immediate    | 1920382    |
| Table_locks_waited       | 0          |
| Threads_cached           | 0          |
| Threads_created          | 30022      |
| Threads_connected        | 1          |
| Threads_running          | 1          |
| Uptime                   | 80380      |
+--------------------------+------------+

И после да се види има ли разлика в моментите, когато програмата се бави, 
в сравнение с моментите, когато не се бави.
 

Здравей и благодаря за идеята. Кодът и трите по точно getuser, update и add са тествани и няма проблеми то друго няма освен тях което да прави проблем и да прави връзка с sql, единствено те правят връзка с sql и там нещо в синтаксиса ако успея да подборя.. Да махна тия escapeи май са излишни или? 

П. П сложих Catch и направих да извежда грешка ако такава има в txt документ, но няма грешки никде, нито остава отворена базата нито нещо товари просто не знам... 

П. П интересно е, че ако спра програмата, която e not responding когато има +10 потребителя след това като се вържат пак пак продължава проблема... 1min delay, но ако са до 8 9 няма проблем 

Линк към коментара
Сподели в други сайтове

Добавете отговор

Можете да публикувате отговор сега и да се регистрирате по-късно. Ако имате регистрация, влезте в профила си за да публикувате от него.

Гост
Напишете отговор в тази тема...

×   Вмъкнахте текст, който съдържа форматиране.   Премахни форматирането на текста

  Разрешени са само 75 емотикони.

×   Съдържанието от линка беше вградено автоматично.   Премахни съдържанието и покажи само линк

×   Съдържанието, което сте написали преди беше възстановено..   Изтрий всичко

×   You cannot paste images directly. Upload or insert images from URL.

  • Разглеждащи това в момента   0 потребители

    • Няма регистрирани потребители разглеждащи тази страница.
×
×
  • Добави ново...

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите Условия за ползване