郁闷的ADO,郁闷的VC,还是用JAVA比较方便,几乎不用考虑内存溢出的问题。
现在我用ADO连接数据库时,只是做连接与关闭的操作,在DEBUG时,窗口总是会出现First-chance exception in TestUseDLL.exe (KERNEL32.DLL): 0xC0000005: Access Violation.这个问题我在网上找了很久,但就是找不到解决的办法。
现在我用ADO连接数据库时,只是做连接与关闭的操作,在DEBUG时,窗口总是会出现First-chance exception in TestUseDLL.exe (KERNEL32.DLL): 0xC0000005: Access Violation.这个问题我在网上找了很久,但就是找不到解决的办法。
bool initConn(char *dbsource,char *user,char *pwd){
//bool bln = false;
CoInitialize(NULL); // 初始化OLE/COM库环境 ,为访问ADO接口做准备
// 创建Connection对象
if (FAILED(m_pConnection.CreateInstance(__uuidof(Connection)))) {
WriteLogFile("connet to Oracle fail",DEBUG_ERROR);
return false;
}
try{
m_pConnection->ConnectionString = dbsource;
m_pConnection->Open("","","",adModeUnknown);
m_pRecordset.CreateInstance(__uuidof(Recordset));
}catch (_com_error &e) { if(m_pConnection){
m_pConnection.Release();
m_pConnection = NULL;
}
return false;
}
return true;
}void closeConn(){ try
{
if (m_pRecordset)
{
if(m_pRecordset->State == adStateOpen)
{
m_pRecordset->Close();
}
m_pRecordset.Release();
m_pRecordset = NULL;
} if (m_pConnection)
{
if(m_pConnection->State == adStateOpen)
{
m_pConnection->Close();
}
m_pConnection.Release();
m_pConnection = NULL;
}
//m_Command = NULL; CoUninitialize();
}
catch(_com_error &e)
{
WriteLogFile("关闭连接时出错", DEBUG_ERROR);
WriteLogFile((char *)e.Description(), DEBUG_ERROR);
}
catch(...)
{
WriteLogFile("closeConn存在其它的不可知的错误。",DEBUG_ERROR);
}
}
如果可能,还是直接用它自己的接口算了,调试起来也方便。
LZ这样判断肯定是有问题的,