这两天需要做有关MFC连接Oracle的项目,上网搜了老半天,东拼西凑,终于搞通了MFC下ADO方式连接Oracle的程序。 下面就按我新建的项目来进行一下说明(项目名称:adooracle) 第一步:在StdAfx.h头文件中加入#import "c:\program files\common files\system\ado\msado15.dll"\ no_namespace rename("EOF","adoEOF") //这句#import……是我见得最多的,可是加上了这句话,在VS3013下是没法运行的 #include "UrlMon.h" #include "Shlwapi.h" #include "ShObjIdl.h" //上下头文件之间需要有空行,没空行,我试了会报错 #include //还必须在 StdAfx.h下加上这四个头文件,方可继续运行 //同时运用了msado15.dll,会提前报错,提示找不到msado15.mlh等文件,按F6生成方案即可 第二步:在头文件adooracle.h中声名 public: _ConnectionPtr m_pConnection;//连接对象指针 第三步:在adooracle.cpp的InitInstance()函数中加入下列代码: AfxOleInit();//初始化COM try//连接数据库 { m_pConnection.CreateInstance(__uuidof(Connection)); _bstr_t strConnect="Provider=MSDAORA.1;User ID='system';Password='renzh';Data Source=orcl;Persist Security Info=False;"; m_pConnection->Open(strConnect,"system","renzh",adModeUnknown); } catch(_com_error e) { AfxMessageBox(TEXT("数据库连接出错!")); AfxMessageBox(e.Description()); exit(-1); } 第四步:数据库就打开了,在所有的类中都可以这样调用: theApp. m_pConnection->Execute((_bstr_t)sql,NULL,adCmdText); 然后在要访问记录集的地方声名一个记录集指针: CString sql=_T("这里面是执行语句!!"): _RecordsetPtr pRs("ADODB.RecordSet"); pRs->Open((_bstr_t)sql,_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText); if (!(pRs->adoBOF))//如果记录集不空 { …… } 取出记录集信息可以用pRs-> GetCollect_r(_T("某个属性列名")));它的返回值是_variant_t,根据需要可以对它进行转换。如在ClistCtrl对象的插入中: m_grd.SetItemText(0,0,(LPTSTR)(_bstr_t)(pRs-> GetCollect_r(_T("第一列的属性名")))); |
|