连接数据库的函数如下:
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);
}

解决方案 »

  1.   

    dbAddTransportMedium函数执行到mysql_query(&conn, sQry);程序就异常退出了。
      

  2.   

    MsgBox 2 个函数, 居然用这多, 包装下嘛, hehe mysql_query F11 进去看看变量是否异常,  这样问, 别人怎么回答你呢
      

  3.   

    MessageBox是临时加上去的。
    原因出在dbConnDB函数,仅仅通过传递MYSQL指针来连接不行,还需要返回该指针,在调用之后赋值给MYSQL指针。