VC++程序员应当如何阅读ADO文档[7]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 ado_database 的 blog

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();

}

本文关键:VC++程序员应当如何阅读ADO文档
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top