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

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

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

     

D101149

There is already an open DataReader associated with this Connection which must be closed first.

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


Здравейте! There is already an open DataReader associated with this Connection which must be closed first. това е грешката която получвам, колеги някой има ли идея къде може да търпся проблема. :(

Сподели този отговор


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

Ами става въпро за програма свързана с MySQL и трябва да се затвори DataReader, за да се отвори нов, но някъде изпускам нещо и не мога да го намеря... 

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 3 часа, bvbfan написа:

Дай кода :)

Радвам се, че някой така писа :) Пращам го:

Става въпрос за .NET (C#) - Open Source за една игра :) Дано да успеете да откриете проблема, защото стана много време не мога да го открия :( Според мен проблемът е някъде в RemoveFromconnectionsList или в SqlInfo.UpdateUser там се получва проблема... :( 

        // A client left the server.
        private void CNL_ClientLeavesHost(Packets.IS_CNL CNL)
        {
            try
            {
                if ((Connections[GetConnIdx(CNL.UCID)].PitOK == 0) && (CNL.Reason != Enums.CNL_Reason.LEAVR_TIMEOUT) && (CNL.Reason != Enums.CNL_Reason.LEAVR_LOSTCONN))
                {
                    InSim.Send_MST_Message("/msg ^6| ^7 ^1" + Connections[GetConnIdx(CNL.UCID)].PlayerName + " fined Ј100 for spectating on track");
                    Connections[GetConnIdx(CNL.UCID)].Cash -= 100;
                }

                if (AccountReset == false)
                {
                    SqlInfo.UpdateUser(Connections[GetConnIdx(CNL.UCID)]);
                }
                if (AccountReset == true)
                {
                    AccountReset = false;
                }

                RemoveFromConnectionsList(CNL.UCID);		// Update Connections[] list
            }
            catch (Exception EX)
            {
                //messagebox.show("CNL - " + EX.Message);
            }
        }

 


Сподели този отговор


Линк към този отговор
Сподели в други сайтове
RemoveFromConnectionsList(GetConnIdx(CNL.UCID));

Или дай повече код, какво прави RemoveFromConnectionsList

Сподели този отговор


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

Прикачвам целият .cs за MySQL. :) 

RemoveFromConnectionsList - Когато даденият играч (user) напусне сървъра той бива изключен от MySQL и така статусът му бива запазен, но пробелмът е следният. Когато той напусне остава отворен и го показва в игра, което ще рече, че ако реши да влезе отново сървъра го показва Online = 1 и бива изхвърлен от сървъра :)

Консултирах се с още едно момче и ми каза, че възможно проблемът да идва от dr.Close

SQL.cs

Редактирано от D101149 (преглед на промените)

Сподели този отговор


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

Но пак не даваш какво прави RemoveFromConnectionsList. Виж ся ква е работата:

if (AccountReset == false)
{
SqlInfo.UpdateUser(Connections[GetConnIdx(CNL.UCID)]);
}
if (AccountReset == true)
{
AccountReset = false;
}

AccountReset първо е true ти не ъпдейтваш юзър инфото, след това го слагаш на false и RemoveFromConnectionsList махаш ID от Connections, вторият път AccountReset е false, но ти не може да извикваш UpdateUser, защото Connections ще ти върне невалидвана конекция, след това се мъчиш да пишеш в MySQL-а с нея.

 

Сподели този отговор


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

реших да го затовяр този код,  но отново дава грешка..

/*if (AccountReset == false)
{
SqlInfo.UpdateUser(Connections[GetConnIdx(CNL.UCID)]);
}
if (AccountReset == true)
{
AccountReset = false;
}
*/

 

Сподели този отговор


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

Значи е другаде, я коментирай долният ред RemoveFromConnectionsList

Сподели този отговор


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

Значи е другаде, я коментирай долният ред RemoveFromConnectionsList

Служи за: когато има свързан потребил със InSim-а този RemoveFromConnectionsList го изключва, когато играчът напусне сървъра

Сподели този отговор


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

Проблемът е оправен! Пробелът беше една променлива Online в моят случай служеше ако бъде изключен и включен инсима да въвежда играчите в режим 1 (режим 0 означава, че не са в сървъра, 1 че са), но когато махнах го и проблемът е решен. Видях, че в таблица изписва числа от рода на 9,5,6 не знам защо а не само 0 и 1 както и да е фиксант е благодаря на bvbfan че отдели от времето си и ми помогна :)

 

П.П и същевременно изключих това, за което си писахме горе относно AccountReset :) 

Редактирано от D101149 (преглед на промените)

Сподели този отговор


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

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

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

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

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

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

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

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

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


×
×
  • Добави ново...