配色: 字号:
2014年最新WINDOWS平台使用ADO连接数据库【李虎】
2014-05-14 | 阅:  转:  |  分享 
  
在WINDOWS平台,通过ADO连接数据库,应该是最标准的。但是由于使是通过COM技术实现的,问题就变得复杂了许多。同时,也因为许多开源的编译器不支持或者不是很好地支持COM技术,给我们学习、开发带来了一些困难。



在这里,我们讨论使用BorlandC++FreeCompiler5.5通过ADO来访问ACCESS文件。原本,BCC55对COM的支持也不是很好,许多COM的支持文件都没有,所以,需要另外从SF上下载BCC的SDK,当前版本是0.0.7.1,请自行下载。



此外,我们不打算通过import"...\msado15.dll"的办法来使用ADO,而是用过使用adoint.h的办法来使用ADO。



#includeInitguid.h

#includeadoid.h//ADOGUID’s

#includeadoint.h//ADOCLASS





再引用对COM的支持。不过,感觉上,假如不用COM中的BSTR转换成char的函数,和ADOConnection中的错误处理,可以不引用下面的COM的(未进行严格测试)。反正影响不大,因为WINDOWS总有COM的支持的,起码目前的WINDOWS是,也就用了。



#includecomutil.h

#pragmacomment(lib,"comsupp.lib")//inbccsdkpackage





好了,定义ADO相关的变量:



ADOFieldpFld;

ADOFieldspFlds;

ADORecordsetpRs;

ADOConnectionpConn;





然后,初始化COM、创建ADOConnection、ADORecordset实例:

::CoInitialize(NULL);

CoCreateInstance(CLSID_CADOConnection,NULL,

CLSCTX_INPROC_SERVER,IID_IADOConnection15,(LPVOID)&pConn);

CoCreateInstance(CLSID_CADORecordset,NULL,

CLSCTX_INPROC_SERVER,IID_IADORecordset,(LPVOID)&pRs);





打开ADO连接:

pConn-〉Open((_bstr_t)L"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=Contract_me_data.mdb",

L"",

L"",

adConnectUnspecified);







打开数据集:(sql是variant类型、hr是HRESULT类型,请自行定义)



hr=pRs-〉Open(sql,(_variant_t)pConn,adOpenStatic,adLockOptimistic,adCmdText);



if(SUCCEEDED(hr)){

//處理數據

}





使用时,要判断是否EOF和BOF。

获取数据时,有一种方法是先得到Fields,再获得指定的Field,再根据Fieldr的get_Value(&value)方法得到数据;另一种方法是,直接通过ADORecordset的get_Collect(index,&value)来得到数据。如果不想得到字段的相关属性,用后一种方法是很直接的。
献花(0)
+1
(本文系weifanglihu...首藏)