Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

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

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

 

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

Featured Replies

Здравейте! Следният код е част от програма, която е за продаване на автомобили. (в игра). Идеята е следната: При натискане на бутона се пише шаси номера на автомобила, примерно: 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 User_Name=@User_Name,User_PlyName=@User_PlyName,User_Cash=@User_Cash,User_Passowrd=@User_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 няма проблем 

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

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

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

Дарение

  • Подкрепи съществуването на форума - направи дарение
    32%
    Дарени 315 € от нужните 1 000 €

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.