MYSQL mysql_init(NULL)函数不返回NULL,返回的东西不能用
如题,这是我的数据库的OPEN函数:
bool CMyDatabase::Open(char * szHost, char * szUser, char * szPasswd,char * szDB,
unsigned int uiPort, char * szSocket, unsigned int uiFlag )
{
if (m_bIsOpen)
{ if (m_nRefCount == 0 )
Close();
else
{ // message:please close all recordset
g_nMyDBError = 1000;
return FALSE;
}
}
m_hdbc = mysql_init(NULL);
if (m_hdbc == NULL)
{ g_nMyDBError = 1001;
return FALSE;
}
if (szDB != NULL)
strcpy(m_szDBName ,szDB);
if ( mysql_real_connect(m_hdbc, szHost, szUser, szPasswd,
szDB, uiPort, szSocket , uiFlag) == NULL )
/*if ( mysql_real_connect(m_hdbc, "localhost", "root", "123",
"abc", 3306, "" , 0) == NULL )*/
{ g_nMyDBError = 1002;//下断点的话会走到这里来
return FALSE;
}
m_bIsOpen = TRUE;
return TRUE;
}
m_hdbc = mysql_init(NULL);这一句执行完成以后m_hdbc不是NULL,但是它到了if ( mysql_real_connect(m_hdbc 这里的时候会出错,会连接失败,m_hdbc的东西我仔细看了,经过mysql_init(NULL)返回的这个根本就没有初始化。我另写了一个超简单的版本:
#include "windows.h"
#include "mysql.h"
#include "stdio.h"
class t
{
public:
bool Init()
{
if(!open())
return false;
return true;
}
private:
bool open()
{
m_hdbc = mysql_init(NULL);
if (m_hdbc == NULL)
{
return FALSE;
}
if ( mysql_real_connect(m_hdbc, "localhost", "root", "123",
"abc", 3306, "" , 0) == NULL )
{
return FALSE;
}
return true;
}
private:
MYSQL* m_hdbc;
};
t g_db;
void main()
{
if(g_db.Init())
printf("");
return;
}
这个版本的可以正常运行,而且我跟踪过去的m_dbc经过mysql_init(NULL)初始化之后里面是有东西的。我的环境是VC6.0,MYSQL是4.1。在线等待答案,希望回帖的人看清楚了我的问题所在,不要从别处复制一些我不想看到的东西过来。谢谢!