打印本文 打印本文 关闭窗口 关闭窗口
VC数据库编程技术应用
作者:武汉SEO闵涛  文章来源:敏韬网  点击数604  更新时间:2009/4/22 23:21:01  文章录入:mintao  责任编辑:mintao

ADO C++ Extensions

  实际上,如果你是用C++进行应用程序开发的话,就应该使用ADO C++ Extensions。我们知道,在VB或者用VBScript来操作ADO的话,是非常方便的,但是如果使用C/C++或者是Java的话,就必须要处理类似VARIANTs这样的数据结构,实现和C++数据结构的转换,而这个无疑是所有C++开发人员都很头疼的事情。但如果你使用C++扩展的话,ADO不需要从数据提供者处得到列信息。ADO在设计时刻使用开发人员提供的列信息。以下是一个简单的示例:

  file://创建和具体记录相对应的类

  class CAuthor : public CADORecordBinding

  {

   BEGIN_ADO_BINDING(CCustomRs1)

   ADO_VARIABLE_LENGTH_ENTRY4(1, adVarChar, m_szau_id, sizeof(m_szau_id), FALSE)

   ADO_VARIABLE_LENGTH_ENTRY4(2,adVarChar,m_szau_fname,sizeof(m_szau_fname), FALSE)

   ADO_VARIABLE_LENGTH_ENTRY4(3,adVarChar,m_szau_lname,sizeof(m_szau_lname), FALSE)

   END_ADO_BINDING()

   protected:

   char m_szau_id[12];

   char m_szau_fname[21];

   char m_szau_lname[41];

  };
  void FetchAuthorData()

  {

   CAuthor author;

   _RecordsetPtr pRs; file://记录集对象

   IADORecordBinding *piAdoRecordBinding;

   pRs.CreateInstance(__uuidof(Recordset)); file://获取COM对象接口指针

   file://得到需要的记录集

   pRs->Open("select au_id, au_fname, au_lname from Employees",

   "Provider=SQLOLEDB;Data Source=sureshk1;Database=pubs;

   User Id=sa;Password=;",

   adOpenForwardOnly, adLockReadOnly, adCmdText);

   file://查询接口IADORecordBinding

   pRs->QueryInterface(__uuidof(IADORecordBinding),(LPVOID*)&piAdoRecordBinding);

   file://和我们自己定义的对象相绑定

   piAdoRecordBinding->BindToRecordset(&author);

   while (VARIANT_FALSE == pRs->EOF) file://得到记录中的相关内容

   {

    printf("%s %s %s", author.m_szau_id, author.m_szau_fname, author.m_szau_lname);

    pRs->MoveNext();

   }

   piAdoRecordBinding->Release(); file://释放对象

  }

打印本文 打印本文 关闭窗口 关闭窗口