Поиск:

Ответ в темуСоздание новой темы Создание опроса
> mysql_close из libmysql не закрывает соединение, В чем проблема? 
:(
    Опции темы
ClickF1
  Дата 24.9.2009, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 24.9.2009
Где: Windows Kernel

Репутация: нет
Всего: нет



Приветствую!
У меня проблема, я активно использую базу данных MySQL версии 5.0.67-community-nt под Windows Server 2003 Web Edition. В комплекте с базой данных идет Заголовочные файлы и lib файлы. Код отлично компилируется и прекрасно работает, за исключением закрытия соединения. 

И это только одна из 20 функций которая использует базу данных. Дело в том что функция mysql_close не закрывает соединение с сервером базы данных, в последствии чего после более 2к коннектов база просто не принимает соединения, и код соответственно не работает..

Что делать?
Код

BOOL server_sql_connect(MYSQL *hSql)
{
#define __LOG_FUNC__
#ifndef __LOG_FUNC__
#define DbgPrint 
#endif
    BOOL bRet = FALSE;

    mysql_init(hSql);
    mysql_options(hSql,MYSQL_READ_DEFAULT_GROUP,SQL_DB_NAME);
    
    if (!(mysql_real_connect(hSql,SQL_SERVER,SQL_LOGIN,SQL_PASSW,SQL_DB_NAME,0,NULL,0)))
    {
        DbgPrint("SQL-> Error connect to SQL Server!\n");
        goto end;
    }    else    {
        DbgPrint("SQL-> Succefull connected to SQL Server. Database [%s] selected\n",SQL_DB_NAME);
        bRet = TRUE;
    }

end:
    return bRet;
#ifndef __LOG_FUNC__
#define DbgPrint DbgPrintEx
#endif
}

BOOL server_get_currency(PCHAR CurrencyId,PCHAR Currency)
{
    CHAR SqlQuery[200 * 2] =  { 0 };
    MYSQL sqlHandle;
    MYSQL_ROW sqlRow;
    MYSQL_RES *sqlRes;
    my_ulonglong Rows = 0,Fields = 0;

    if(!server_sql_connect(&sqlHandle))
    {
        goto error_end;
    }

    sprintf((PCHAR)&SqlQuery,"SELECT currency_title FROM _currency WHERE currency_id = '%d' LIMIT 1",CurrencyId);
    
    DbgPrint("-> SqlQuery %s\n",(PCHAR)&SqlQuery);
    
    if(mysql_query(&sqlHandle,(PCHAR)&SqlQuery) == 0)
    {
        sqlRes = mysql_store_result( &sqlHandle );
        if(sqlRes != NULL)
        {
            Rows = mysql_num_rows( sqlRes );
            if(Rows == 1)
            {
                while((sqlRow = mysql_fetch_row(sqlRes)))
                {
                    Rows = mysql_num_fields(sqlRes);
                    DbgPrint("-> Currency is : %s\n",sqlRow[0]);
                    strcpy(Currency,sqlRow[0]);
                    //
                }
                mysql_free_result(sqlRes);
                mysql_close(&sqlHandle);
                goto end;
            }    else    {
                DbgBreak();
                DbgPrint("-> Error get currency!1 fix it !\n");
                return FALSE;
            }
        }
    }    else    {
        // !mysql_query
        DbgPrint("-> server_get_currency. Error. Cant do SQL query %s\n",(PCHAR)&SqlQuery);
        DbgBreak();
        goto error_end;
    }


error_end:
    return FALSE;
end:
    return TRUE;
}




user posted image
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
jonie
Дата 24.9.2009, 21:17 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 4
Всего: 118



а функция mysql_close чего - возращает void чтоли? посмотрите что она возращает, возможно поймете в чем ошибка. Проверье, что хендл при открытии равен тому что вы передаете при закрытии...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
ClickF1
Дата 24.9.2009, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 24.9.2009
Где: Windows Kernel

Репутация: нет
Всего: нет



Код

void mysql_close(MYSQL *mysql);


Вот так...а хэндл это указатель на структуру в которой почти ничего не понятно.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
jonie
Дата 24.9.2009, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 4
Всего: 118



ну один фиг есть mysql_error наверняка, или нет?



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
ClickF1
Дата 25.9.2009, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 24.9.2009
Где: Windows Kernel

Репутация: нет
Всего: нет



Цитата

СИНТАКСИС:

char *mysql_error(MYSQL *mysql)
ОПИСАНИЕ:

Выводит сообщение об ошибке, если ошибку вернула последняя вызванная функция MySQL. В противном случае возвращает пусту


В моем случае возвращает пустую строку..
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
ClickF1
Дата 25.9.2009, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 24.9.2009
Где: Windows Kernel

Репутация: нет
Всего: нет



Код

void my_mysql_close(MYSQL *Handle)
{
    PCHAR Error = 0;
    closesocket(Handle->net.fd);
    mysql_close(Handle);    
    Error = mysql_error(Handle);
    if(Error)
    {
        DbgPrint("my_mysql_close error : %s\n",Error);
    }
}


"MySQL server has gone away". Wtf ?
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Базы данных | Следующая тема »


 




[ Время генерации скрипта: 0.0716 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.