具体如下:/***strConnect====连接字符串,已赋值*****/BOOL CAdo::ConnectDB()
{ CString strbuf;
try
{
m_pConnection.CreateInstance(__uuidof(Connection));
WriteLog("123");//这句还能执行,但到下面 就突然异常
m_pConnection->CursorLocation=adUseClient;//执行到这一步,就异常了,而且也没捕获到异常
HRESULT hr=m_pConnection->Open(m_strConnect,"","",adModeUnknown); if(!SUCCEEDED(hr))
{
return FALSE;
}
}
catch(_com_error e)
{ if(m_pConnection->State)
{
m_pConnection->Close();
}
m_pConnection=NULL; return false;
} return TRUE;
}
{ CString strbuf;
try
{
m_pConnection.CreateInstance(__uuidof(Connection));
WriteLog("123");//这句还能执行,但到下面 就突然异常
m_pConnection->CursorLocation=adUseClient;//执行到这一步,就异常了,而且也没捕获到异常
HRESULT hr=m_pConnection->Open(m_strConnect,"","",adModeUnknown); if(!SUCCEEDED(hr))
{
return FALSE;
}
}
catch(_com_error e)
{ if(m_pConnection->State)
{
m_pConnection->Close();
}
m_pConnection=NULL; return false;
} return TRUE;
}
你应该在程序开始调用 ::CoInitialize(NULL);
{
CoInitialize(NULL);
memset(this->m_strConnect,0,sizeof(this->m_strConnect));
memset(this->m_strTable,0,sizeof(this->m_strTable));
memset(this->m_strWhere,0,sizeof(this->m_strWhere));
//sprintf(m_strConnect,"Driver={SQL Server};Server=%s;Option=3;DATABASE=%s;UID=sa;PWD=%s;","IP","数据库","密码");
}
应该是这句执行失败,m_pConnection为空指针吧。
这种错误应该是没有初始化COM引起的。你是不是在多线程中使用了CADO?那样的话每个线程都要初始化COM
{ int nRet=0;
CAdo adooo; while(true)
{
sprintf(adooo.m_strConnect,"Driver={SQL Server};Server=%s;Option=3;DATABASE=%s;UID=%s;PWD=%s;",m_strDBIP,m_strDBName,m_strDBAcc,m_strDBPwd); if(!adooo.ConnectDB())
{
Sleep(1000)
continue;
}
}
这个是线程处理函数CAdo adooo;这个在构造函数中 已经调用了 CoInitialize(NULL);
这里判断一下是否成功:
if(SUCCEEDED(hr))
执行后m_pConnection==NULL
不知道了
这个版本,在俩个不同的用户那 用 一个没问题一个就出现这个问题了