之前的捕获代码也贴在这里
catch(_com_error e) //捕捉异常 { CString strErro; strErro.Format("连接数据库失败!代码:%08X 信息:%s 描述:%s\r\n", e.Error(),(wchar_t*)e.ErrorMessage(),(wchar_t*)e.Description()); AfxMessageBox(strErro); return FALSE; } catch(...) { AfxMessageBox("Unkown Error..."); }+初始化后成功~
::CoInitialize(NULL); OnMenuitemRelogin() ; //调用登陆框,首先显示登陆框 ::CoUninitialize();
http://hi.baidu.com/isafesoft/item/97c9b4c19183e6b30d0a7be8
或者参照上述地方的
后来查资料知道,ADO是com组件,它必须先进行初始才能够正常使用,初始方法是在代码前加入一行: CoInitialize(NULL); 当然,最好在代码结束的地方加一行 CoUninitialize(); 那么,程序就能够正常运行了. 总结一下,在MFC中可以用AfxOleInit();但在非MFC环境下一定要用CoInitialize().有部分高深者习惯将CoInitialize()放在工程的APP类的InitialInstance()中,所以在直接调用ADO联机的地方看不到它,但千万不要以为没有它也能调用ADO进行数据访问哦!
CMy10DBMSApp::CMy10DBMSApp() { // TODO: add construction code here, // Place all significant initialization in InitInstance //初始化OLE环境 if(!AfxOleInit()) { AfxMessageBox("OLE初始化失败"); } }