连接数据库的函数如下:
int dbConnDB(MYSQL *conn)
{
conn = mysql_init (NULL); if (conn == NULL)
{
_tcsncpy(gszDBError, _T("MySQL数据库初始化错误!"), (sizeof(gszDBError)-1)/sizeof(TCHAR)*sizeof(CHAR));
return (ERR_DB_INIT);
}
#if defined (MYSQL_VERSION_ID) && MYSQL_VERSION_ID >= 32200 // 3.22 and up
if (mysql_real_connect (conn, hname, uname, pwd, dbname, atoi(portnum), NULL, 0) == NULL)
{
_tcsncpy(gszDBError, _T("连接MySQL数据库失败1!"), (sizeof(gszDBError)-1)/sizeof(TCHAR)*sizeof(CHAR));
return (ERR_DB_CONN);
}
#else
if (mysql_real_connect (conn, hname, uname, pwd, atoi(portnum), NULL, 0) == NULL)
{
_tcsncpy(gszDBError, _T("连接MySQL数据库失败2!"), (sizeof(gszDBError)-1)/sizeof(TCHAR)*sizeof(CHAR));
return (ERR_DB_CONN);
}
if (dbname != NULL)
{
if (mysql_select_db (conn, dbname != 0)
{
_tcsncpy(gszDBError, _T("选择数据库失败!"), (sizeof(gszDBError)-1)/sizeof(TCHAR)*sizeof(CHAR));
return (ERR_DB_CONN);
mysql_close (conn);
return (ERR_DB_SELECTDB);
}
}
#endif
return(0);
}
int dbCloseDB(MYSQL *conn)
{
mysql_close(conn);
return(0);
}执行查询的函数如下:int dbAddTransportMedium(TransportMedium *tm)
{
char sQry[QRYSIZE];
MYSQL conn;
int ret=0; //conn = &rconn;
if(dbConnDB(&conn) != 0)
{
memset(gszDBError, 0, sizeof(gszDBError));
sprintf(gszDBError, "DBError: %u (%s)", mysql_errno(&conn), mysql_error(&conn));
return(ERR_DB_CONN);
}
MessageBox(NULL, "CONN OK", "ADD TM", MB_OK);
memset(sQry, 0, sizeof(sQry));
//sprintf(sQry, "INSERT INTO transport_medium(transport_medium) VALUES (\''%s\'')",
// tm->eTransportMedium.szContent); sprintf(sQry, "DELETE FROM transport_medium");
MessageBox(NULL, sQry, "ADD TM", MB_OK);
//ret = mysql_real_query(conn, sQry, (unsigned int)strlen(sQry));
mysql_query(&conn, sQry);//到这里异常退出
MessageBox(NULL, "after query", "ADD TM", MB_OK);//这个消息框没弹出来
if( ret != 0)
{
memset(sQry, 0, sizeof(sQry));
sprintf(sQry, "ADD TM failed - %d", ret);
MessageBox(NULL, sQry, "ADD TM", MB_OK);
//memset(gszDBError, 0, sizeof(gszDBError));
//sprintf(gszDBError, "DBError: %ld (%s)", mysql_errno(&conn), mysql_error(&conn));
dbCloseDB(&conn);
return(ERR_DB_WRITE);
}MessageBox(NULL, "ADD TM OK", "ADD TM", MB_OK);
dbCloseDB(&conn);
return(0);
}
int dbConnDB(MYSQL *conn)
{
conn = mysql_init (NULL); if (conn == NULL)
{
_tcsncpy(gszDBError, _T("MySQL数据库初始化错误!"), (sizeof(gszDBError)-1)/sizeof(TCHAR)*sizeof(CHAR));
return (ERR_DB_INIT);
}
#if defined (MYSQL_VERSION_ID) && MYSQL_VERSION_ID >= 32200 // 3.22 and up
if (mysql_real_connect (conn, hname, uname, pwd, dbname, atoi(portnum), NULL, 0) == NULL)
{
_tcsncpy(gszDBError, _T("连接MySQL数据库失败1!"), (sizeof(gszDBError)-1)/sizeof(TCHAR)*sizeof(CHAR));
return (ERR_DB_CONN);
}
#else
if (mysql_real_connect (conn, hname, uname, pwd, atoi(portnum), NULL, 0) == NULL)
{
_tcsncpy(gszDBError, _T("连接MySQL数据库失败2!"), (sizeof(gszDBError)-1)/sizeof(TCHAR)*sizeof(CHAR));
return (ERR_DB_CONN);
}
if (dbname != NULL)
{
if (mysql_select_db (conn, dbname != 0)
{
_tcsncpy(gszDBError, _T("选择数据库失败!"), (sizeof(gszDBError)-1)/sizeof(TCHAR)*sizeof(CHAR));
return (ERR_DB_CONN);
mysql_close (conn);
return (ERR_DB_SELECTDB);
}
}
#endif
return(0);
}
int dbCloseDB(MYSQL *conn)
{
mysql_close(conn);
return(0);
}执行查询的函数如下:int dbAddTransportMedium(TransportMedium *tm)
{
char sQry[QRYSIZE];
MYSQL conn;
int ret=0; //conn = &rconn;
if(dbConnDB(&conn) != 0)
{
memset(gszDBError, 0, sizeof(gszDBError));
sprintf(gszDBError, "DBError: %u (%s)", mysql_errno(&conn), mysql_error(&conn));
return(ERR_DB_CONN);
}
MessageBox(NULL, "CONN OK", "ADD TM", MB_OK);
memset(sQry, 0, sizeof(sQry));
//sprintf(sQry, "INSERT INTO transport_medium(transport_medium) VALUES (\''%s\'')",
// tm->eTransportMedium.szContent); sprintf(sQry, "DELETE FROM transport_medium");
MessageBox(NULL, sQry, "ADD TM", MB_OK);
//ret = mysql_real_query(conn, sQry, (unsigned int)strlen(sQry));
mysql_query(&conn, sQry);//到这里异常退出
MessageBox(NULL, "after query", "ADD TM", MB_OK);//这个消息框没弹出来
if( ret != 0)
{
memset(sQry, 0, sizeof(sQry));
sprintf(sQry, "ADD TM failed - %d", ret);
MessageBox(NULL, sQry, "ADD TM", MB_OK);
//memset(gszDBError, 0, sizeof(gszDBError));
//sprintf(gszDBError, "DBError: %ld (%s)", mysql_errno(&conn), mysql_error(&conn));
dbCloseDB(&conn);
return(ERR_DB_WRITE);
}MessageBox(NULL, "ADD TM OK", "ADD TM", MB_OK);
dbCloseDB(&conn);
return(0);
}
原因出在dbConnDB函数,仅仅通过传递MYSQL指针来连接不行,还需要返回该指针,在调用之后赋值给MYSQL指针。