mysql版本:5.1.45
开发环境:vs2008 sprintf_s(szSql, sizeof(szSql), "select * from postTmp order by autoid");
if(mysql_query(&mysql, szSql))
{
LogMessage(mysql_error(&mysql));
mysql_close(&mysql);
return ;
}
MYSQL_RES* pResult =mysql_use_result(&mysql);
if(!pResult)
{
LogMessage(mysql_error(&mysql));
return ;
}
MYSQL_ROW row;
char szId[40];
while((row =mysql_fetch_row(pResult)))
{
strcpy_s(szId, sizeof(szId), row[1]);
//进行数据处理……
Sleep(1000); sprintf_s(szSql, sizeof(szSql), "delete from postTmp where id='%s'", szId);
if(mysql_query(&myConn, szSql))
LogMessage(mysql_error(&myConn));
}//while((row =mysql_fetch_row(pResult))) end
mysql_free_result(pResult);
mysql_close(&myConn);
mysql_close(&mysql);一直卡在delete那,有没有什么办法可以解决的??
开发环境:vs2008 sprintf_s(szSql, sizeof(szSql), "select * from postTmp order by autoid");
if(mysql_query(&mysql, szSql))
{
LogMessage(mysql_error(&mysql));
mysql_close(&mysql);
return ;
}
MYSQL_RES* pResult =mysql_use_result(&mysql);
if(!pResult)
{
LogMessage(mysql_error(&mysql));
return ;
}
MYSQL_ROW row;
char szId[40];
while((row =mysql_fetch_row(pResult)))
{
strcpy_s(szId, sizeof(szId), row[1]);
//进行数据处理……
Sleep(1000); sprintf_s(szSql, sizeof(szSql), "delete from postTmp where id='%s'", szId);
if(mysql_query(&myConn, szSql))
LogMessage(mysql_error(&myConn));
}//while((row =mysql_fetch_row(pResult))) end
mysql_free_result(pResult);
mysql_close(&myConn);
mysql_close(&mysql);一直卡在delete那,有没有什么办法可以解决的??
show processlist;
Delete 语句状态是locked
而且我看到的是人用的是MYSQL_RES* pResult =mysql_use_result(&mysql);
它表示服务器端始终要存着一份结果集。解决尝试的办法:
1. 不使用嵌套,将你要删除的id,存到数组里头,然后再执行逐个删除
2. 使用嵌套,但读取结果集以后,使用mysql_store_result代替mysql_use_result. 此方法不一定保证好使,但需要你的实验来验证。