inline void testhr(hresult _hr) { if failed(_hr) _com_issue_error(_hr); }
class ccustomrs : public cadorecordbinding
{
begin_ado_binding(ccustomrs)
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()
public:
char m_ch_fname[22];
char m_ch_lname[32];
ulong m_ul_fnamestatus;
ulong m_ul_lnamestatus;
};
void main(void)
{
::coinitialize(null);
try
{
_recordsetptr prs("adodb.recordset");
ccustomrs rs;
iadorecordbindingptr picrs(prs);
prs->open("select * from employee order by lname",
"dsn=pubs;uid=sa;pwd=;",
adopenstatic, adlockoptimistic, adcmdtext);
testhr(picrs->bindtorecordset(&rs));
while (!prs->endoffile)
{
// 处理ccustomrs中的数据
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>"));
// 移动到下一行,新行的值会被自动填充到对应的ccustomrs的变量中
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());
}
::couninitialize();
}