//调用_Recordset的Open方法取得Recordset对象 pRs->Open("SELECT * FROM Employee ORDER BY lname", "dsn=pubs;uid=sa;pwd=;", adOpenStatic, adLockOptimistic, adCmdText);
//大家注意,这里的EndOfFile对应上文import语句中的rename("EOF", "EndOfFile"),其实就是EOF。rename的作用为了防止命名冲突。 while (!pRs->EndOfFile) { // Process data in the CCustomRs C++ instance variables. printf("Name = %s %s\n", (rs.m_ul_fnameStatus == adFldOK ? rs.m_ch_fname: "<Error>"), (rs.m_ul_lnameStatus == adFldOK ? rs.m_ch_lname: "<Error>")); // Move to the next row of the Recordset. // Fields in the new row will automatically be // placed in the CCustomRs C++ instance variables.
另外下面有个例子,不知对你有否帮助
//引入msado15.dll文件,从而声明了ADO类型库
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "EndOfFile")#include <stdio.h>
#include <icrsint.h> //在此处包含icrsint.h头文件//_COM_SMARTPTR_TYPEDEF 宏定义了一个_com_ptr_t类型的智能(smart)指针IADORecordBingingPtr
_COM_SMARTPTR_TYPEDEF(IADORecordBinding, __uuidof(IADORecordBinding));//定义一个测试函数
inline void TESTHR(HRESULT _hr) { if FAILED(_hr) _com_issue_error(_hr); }//定义一个派生自CADORecordBinding的类
class CCustomRs : public CADORecordBinding
{
//开始进行数据类型绑定
BEGIN_ADO_BINDING(CCustomRs)
//把Recordset的第2个adVarChar类型的字段绑定到C/C++变量m_ch_fname上
ADO_VARIABLE_LENGTH_ENTRY2(2, adVarChar, m_ch_fname,
sizeof(m_ch_fname), m_ul_fnameStatus, false)
ADO_VARIABLE_LENGTH_ENTRY2(4, adVarChar, m_ch_lname,
sizeof(m_ch_lname), m_ul_lnameStatus, false)
//结束绑定
END_ADO_BINDING()//紧接着定义上述宏中用到的C/C++变量
public:
CHAR m_ch_fname[22];
CHAR m_ch_lname[32];
ULONG m_ul_fnameStatus;
ULONG m_ul_lnameStatus;
};//开始程序执行
void main(void)
{
::CoInitialize(NULL); //初始化COM对象
try
{
//typedef _com_ptr_t<_Recordset, __uuidof(_Recordset)> _RecordsetPtr:指向一个_Recordset的智能指针
_RecordsetPtr pRs("ADODB.Recordset");
//定义一个CCustomRS: public CADORecordBinding类的实例
CCustomRs rs;
//把IADORecordBindingPtr接口类型对象picRs指定到pRs对象,从而实现接口和对象之间的关联
IADORecordBindingPtr picRs(pRs);
//调用_Recordset的Open方法取得Recordset对象
pRs->Open("SELECT * FROM Employee ORDER BY lname",
"dsn=pubs;uid=sa;pwd=;",
adOpenStatic, adLockOptimistic, adCmdText);
//利用CCustomRS类中的宏定义,实现数据之间的绑定
//如果绑定成功,我们就可以使用rs对象的属性了
TESTHR(picRs->BindToRecordset(&rs));
//大家注意,这里的EndOfFile对应上文import语句中的rename("EOF", "EndOfFile"),其实就是EOF。rename的作用为了防止命名冲突。
while (!pRs->EndOfFile)
{
// Process data in the CCustomRs C++ instance variables.
printf("Name = %s %s\n",
(rs.m_ul_fnameStatus == adFldOK ? rs.m_ch_fname: "<Error>"),
(rs.m_ul_lnameStatus == adFldOK ? rs.m_ch_lname: "<Error>")); // Move to the next row of the Recordset.
// Fields in the new row will automatically be
// placed in the CCustomRs C++ instance variables.
pRs->MoveNext();
}
}
catch (_com_error &e )
{
printf("Error:\n");
printf("Code = %08lx\n", e.Error());
printf("Meaning = %s\n", e.ErrorMessage());
printf("Source = %s\n", (LPCSTR) e.Source());
printf("Description = %s\n", (LPCSTR) e.Description());
}
//清除COM对象实例
::CoUninitialize();
}