如何实时判断数据库当前是否断开???

tanwei1002 2008-11-24 08:59:34
程序是vc开发,数据库是MSSQL SERVER2000
程序正常连接状态下,服务器重启、或网络断开等原因将导致数据库连接非正常断开,这时m_pConnection->State显示是连接状态,但其实连接已经断开,服务器、网络正常后一样,目前唯一的办法是关闭并重开程序,这显然不人性化。(m_pConnection是_ConnectionPtr类型)

  每次查询数据不经判断连接状态都来一次重新连接数据库明显不现实。

  请问,如何判断当前程序是否失去了连接?好让我们重新连接数据库。

谢谢!!!!哪位高手指点下
...全文
471 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanwei1002 2008-11-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lfchen 的回复:]
_ConnectPtr要Close(),Release(),才可以重新Open()
[/Quote]

现在没根据state来判断了,我现在是执行一个查询操作,如果有结果则连接成功,如果没结果,则重连,可是现在重连不上....
情况如我第二楼所说那样。
一条晚起的虫 2008-11-24
  • 打赏
  • 举报
回复
_ConnectPtr要Close(),Release(),才可以重新Open()
tanwei1002 2008-11-24
  • 打赏
  • 举报
回复
我是在程序初始化函数中用了一线程,代码如下:
m_hThreadLinkDB = CreateThread(NULL, 0, ThreadLinkDB, (void*)this, 0, NULL);
WaitForSingleObject(m_hThreadLinkDB,0);
.... ....

线程函数如下:
DWORD WINAPI CViewLeftTree::ThreadLinkDB(LPVOID lpParam)
{
CViewLeftTree *pThis = (CViewLeftTree*)lpParam;
while (1)
{
if (-1 == g_DbOperate->JudgeDBLink()) //我把对数据库的操作都封装在一个类里面了,其中g_DbOperate是这类的一个全局指针变量 {
Sleep(3000);
}
else
{
Sleep(3000);
}
}

return 0;
}

另外JudgeDBLink()函数代码:
int COperateDB::JudgeDBLink()
{
EnterCriticalSection(&m_CSLinkC);
int iRet = -1;

_CommandPtr cmd;
cmd.CreateInstance("ADODB.Command");
ParametersPtr pParamRk;
pParamRk = cmd->GetParameters();

cmd->ActiveConnection = m_pConnection;
cmd->CommandText = "JudgeDBLink"; //调用了一个存储过程,是个对系统表的一个查询操作
cmd->CommandType = adCmdStoredProc;
try
{
_RecordsetPtr Rcd = cmd->Execute(NULL, NULL, adCmdStoredProc);
if (Rcd->adoEOF)
iRet = -1; //-1表示没结果,也就是没连接上数据库
else
iRet = 1; //1表示有结果,也可以说明已经联上数据库
}
catch (...)
{
iRet = -1;
if (CreateLink()) //如果没联上,重新连数据库 其中CreateLink()返回值是BOOL
{
iRet = 1; //连接成功
}
else
{
iRet = -1; //连接失败
}
}
LeaveCriticalSection(&m_CSLinkC);
return iRet;
}

现在问题是,如果在程序连接过程中,断开网络连接,然后再重新连上网络,(数据库服务器没在本地机器),这过程理应重新连接数据库,但是我调试却发现却一直没连上,重连也失败。
不知道问题出哪,请高手指点下,谢谢了
一条晚起的虫 2008-11-24
  • 打赏
  • 举报
回复
直接执行语句,在catch到错误后,如果错误是数据库未链接,则连接数据库

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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