首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

ADO访问sql server 2000(sp4)怎么判断连接断开

2012-01-28 
ADO访问sql server 2000(sp4)如何判断连接断开?我的步骤是连接数据库,然后起一个线程,每隔5秒从数据库sele

ADO访问sql server 2000(sp4)如何判断连接断开?

我的步骤是连接数据库,然后起一个线程,每隔5秒从数据库select数据进行处理。但是我没法处理sql server断开的情况。因为我只要把sql服务一停,在线程里调用的_RecordsetPtr的open方法就崩溃了。
我试图用三种方法去处理:
1.给RecordsetPtr的open加上try catch捕获异常,经测试无效
2.在open之前首先判断连接状态,使用的_ConnectionPtr::GetState(),经过测试,即使断线也返回adStateOpen,不返回adStateClose
3.继承ConnectionEventsVt类,给ado添加事件响应,连接成功后raw_ConnectComplete()函数可以被调用,证明添加方法正确,但是断开sql服务后,raw_Disconnect()函数却不会被调用。在正常情况下,通过调用ConnectionPtr::close()关闭连接,raw_Disconnect()则会被调用。

难道说sql服务器异常断开就只能造成程序崩溃了吗?很是郁闷,请各位高手帮忙,谢谢。

[解决办法]
Connection->GetState()!= adStateClosed;

或者,尝试再次连接,根据返回值判断.
[解决办法]

C/C++ code
// 捕捉异常    catch(_com_error e)    {        m_pRs->Close();        // 显示错误信息        AfxMessageBox(e.Description());    }
[解决办法]
操作之前去判断一下就可以了,

C/C++ code
return m_pConnection->GetState() != adStateClosed;enum __declspec(uuid("00000532-0000-0010-8000-00aa006d2ea4"))ObjectStateEnum{    adStateClosed = 0,    adStateOpen = 1,    adStateConnecting = 2,    adStateExecuting = 4,    adStateFetching = 8};
[解决办法]
while(true)
{
try
{
conn->Open(connectionString, L"", L"", adModeUnknown);

while(true)
{
data = conn->Execute(query, NULL, adCmdText);

data->Close();
}
}
catch (_com_error e)
{
conn->Close();
}
}
我是这样处理的,可以达到效果。
[解决办法]
我教你怎么使用try{
if(!_connection->Stata){//连接无效}
}
catach(_com_err &e)
{
return;
}

热点排行