ADO方式连接数据库,出现"无效指针"错误,错误代码为:0x80004003

之前的捕获代码也贴在这里

	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进行数据访问哦!


后来仔细看了下书上实例,在App函数中添加了OLE环境初始化代码

CMy10DBMSApp::CMy10DBMSApp()
{
	// TODO: add construction code here,
	// Place all significant initialization in InitInstance
	//初始化OLE环境
	if(!AfxOleInit())
	{
		AfxMessageBox("OLE初始化失败");	 
	}
}



猜你喜欢

转载自blog.csdn.net/popppig/article/details/7776517