带 Extensions 的 ADO 范例

本文介绍了一个使用C++与ADO(ActiveX Data Objects)结合的示例程序,演示了如何通过ADO从数据库检索数据并绑定到C++变量中进行处理。此示例展示了从数据库读取姓名和年龄等字段的具体实现。

该程序说明了如何从字段检索数值并将数值转换为 C++ 变量。#define INITGUID
#import "c:/Program Files/Common Files/System/ADO/msado15.dll"
   no_namespace rename("EOF", "EndOfFile")
#include <stdio.h>
#include "icrsint.h"void dump_com_error(_com_error &e)
   {
printf("Error/n");
printf("/a/tCode = %08lx/n", e.Error());
printf("/a/tCode meaning = %s", e.ErrorMessage());
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
printf("/a/tSource = %s/n", (LPCSTR) bstrSource);
printf("/a/tDescription = %s/n", (LPCSTR) bstrDescription);
   }class CCustomRs :
   public CADORecordBinding
{
BEGIN_ADO_BINDING(CCustomRs)
   ADO_VARIABLE_LENGTH_BINDING_ENTRY(1, adVarChar, m_szau_lname,
         sizeof(m_szau_lname), lau_lnameStatus, FALSE)
   ADO_VARIABLE_LENGTH_BINDING_ENTRY(2, adVarChar, m_szau_fname,
         sizeof(m_szau_fname), lau_fnameStatus, TRUE)
END_ADO_BINDING()public:
   CHAR   m_szau_lname[41];
   ULONG   lau_lnameStatus;
   CHAR   m_szau_fname[41];
   ULONG   lau_fnameStatus;
};VOID   main()
   {
   HRESULT hr;
   IADORecordBinding   *picRs = NULL;
  
   ::CoInitialize(NULL);   try
      {
      _RecordsetPtr pRs.CreateInstance(__uuidof(Recordset));      CCustomRs rs;
     
      pRs->Open("select FirstName, LastName, Age from Employees",
         "dsn=pubs;uid=sa;pwd=;",
         adOpenStatic, adLockOptimistic, adCmdUnknown);
     
      if (FAILED(hr = pRs->QueryInterface(__uuidof(IADORecordBinding),
            (LPVOID*)&picRs)))
         _com_issue_error(hr);
     
      if (FAILED(hr = picRs->BindToRecordset(&rs)))
         _com_issue_error(hr);      while (VARIANT_FALSE == pRs->EndOfFile)
         {
      // 处理 CCustomRs C++ 实例变量中的数据。         printf("/a/tName = %s /t%s",
            (lau_fnameStatus == adFldOK ? m_szau_fname : "<NULL>"),
            (lau_lnameStatus == adFldOK ? m_szau_lname): "<NULL>"));      // 更改 Recordset 的当前行。
      // 新当前行的 Recordset 数据将被
      // 自动取出并防止在 CCustomRs C++ 实例变量中。
  
         pRs->MoveNext();
         }
      }
   catch (_com_error &e)
      {
      dump_com_error(e);
      }   if (picRs)
      picRs->Release();   CoUninitialize();
   };

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值