MySQL重新连接问题请教

gwinner 2007-08-23 02:52:45
大家都知道,MySQL服务器会将一个在wait_timeout时间内没有任何动作的连接自动关闭,所以,如果一个连接被关闭后,客户端如果想要再次执行查询,必须重新连接。

我的客户端通过VC6+ODBC+ADO与MySQL通讯,共使用10个连接,其中任何一个可能会很长时间无动作,我的问题是:
当某次查询失败时,我使用如下方法立即重新连接,连接成功,但查询失败,但如果等待3分钟左右重新连接,则查询成功:_ConnectionPtr::Close(),_ConnectionPtr::Release(),_ConnectionPtr::Open().

请高手指点,以上方法为何不妥,是否有更好的方法。
...全文
142 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
BD6AAO 2007-08-23
  • 打赏
  • 举报
回复
BOOL

ConfigureDBDataSource(const char * pMCSCode, const char * pIP, BOOL bAutoReconnect)

{

char lpszAttributes[300] = "";

int nLen = 0;



sprintf((char *)&lpszAttributes[nLen], "DSN=%s", pMCSCode);

nLen += (strlen((char *)&lpszAttributes[nLen]) + 1);

strcpy((char *)&lpszAttributes[nLen], "Database=IRIS");

nLen += (strlen((char *)&lpszAttributes[nLen]) + 1);

strcpy((char *)&lpszAttributes[nLen], "Description=");

nLen += (strlen((char *)&lpszAttributes[nLen]) + 1);

sprintf((char *)&lpszAttributes[nLen], "Password=%s", DB_REMOTE_GRANT_PASSWORD);

nLen += (strlen((char *)&lpszAttributes[nLen]) + 1);

strcpy((char *)&lpszAttributes[nLen], "Port=3306");

nLen += (strlen((char *)&lpszAttributes[nLen]) + 1);

sprintf((char *)&lpszAttributes[nLen], "Server=%s", pIP);

nLen += (strlen((char *)&lpszAttributes[nLen]) + 1);

sprintf((char *)&lpszAttributes[nLen], "User=%s", DB_REMOTE_GRANT_USER);

if (bAutoReconnect)

{

nLen += (strlen((char *)&lpszAttributes[nLen]) + 1);

sprintf((char *)&lpszAttributes[nLen], "OPTION=4194304", DB_REMOTE_GRANT_USER);

}



return SQLConfigDataSource( NULL,

ODBC_ADD_SYS_DSN, //

"MySQL ODBC 3.51 Driver", (char *)lpszAttributes);

}

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧