ADO 连接数据库失败后阻塞的问题
在程序中开了两个线程,都会调用下列代码连接oracle数据库,如果数据库连接失败,那么会每秒钟重新连接一次,可是在重连过程中,发现有时这两个线程调用DBConnection->Open()时会被阻塞,不再往下执行,也不返回;
而且在重连过程中,有时会返回错误“灾难性故障(0x8000ffff)”,之后一个循环再连接数据库时线程就会阻塞在同样的位置,而且CPU占用率是100%,这是为什么?
::CoInitialize(NULL);
_ConnectionPtr DBConnection;
char bstrName[256];
sprintf(bstrName,"Provider=OraOLEDB.Oracle.1;Data Source=%s;User Id=%s;Password=%s;",
DataSource,UserID,Password);
try
{
//打开数据库:
HRESULT hr = DBConnection.CreateInstance(__uuidof(Connection));
if(SUCCEEDED(hr))
{
// DBConnection->put_ConnectionTimeout(long(5));
// DBConnection->put_CommandTimeout(long(5));
hr = DBConnection->Open(bstrName, "" ,"" , adConnectUnspecified/*adAsyncConnect*/);
if(SUCCEEDED(hr))
{
}
else
{
}
}
else
{
}
}
catch(_com_error &e)
{
DWORD errorCode = e.Error(); //e.WCode();
str=e.ErrorMessage();
}