手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>C/C++>列表

ADOVC Extensions入门

来源:互联网 作者:西部数码 时间:2008-04-09
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!


  ADO VC Extensions是ADO 2.0 版本提供的新接口,它支持不通过 VARIANT 便可将数据检索到本地的 C/C 数据类型中。此外,它还提供能简化接口使用过程的预处理宏,这些扩展程序使用简便并且性能良好。

  ADO VC Extensions 可将 Recordset 对象的字段映射到 C/C 变量,字段与变量的映射称为绑定条目。预处理宏用来定义数值、定长和变长变量的绑定。

  我们以一个简单的程序为例,说明如何在VC 中使用带Extensions 的ADO访问SQL SERVER数据库。我们假定安装了SQL SERVER数据库的Netbios名为nt_sqlserver,要访问的数据库名为pubs,操作的表名为authors。

  我们可以新建一个空的工程,选择Win32 Console Application类型。先加入一个头文件,并命名为ADOtest.h,源代码如下:

  //要使用 VC Extensions,必须在应用程序中包含的头文件:

  #include "icrsint.h"

  // 该类从"authors"表中 摘取出 fname, lname, city和state 四个字段

  class CAuthorsRs : public CADORecordBinding

  {

  BEGIN_ADO_BINDING(CAuthorsRs)

  ADO_VARIABLE_LENGTH_ENTRY2(1, adVarChar, m_au_fname,

  sizeof(m_au_fname), l_fnameStatus, TRUE)

  ADO_VARIABLE_LENGTH_ENTRY2(2, adVarChar, m_au_lname,

  sizeof(m_au_lname), l_lnameStatus, TRUE)

  ADO_VARIABLE_LENGTH_ENTRY2(3, adVarChar, m_au_city,

  sizeof(m_au_city), l_cityStatus, TRUE)

  ADO_VARIABLE_LENGTH_ENTRY2(4, adChar, m_au_state,

  sizeof(m_au_state), l_stateStatus, TRUE)

  END_ADO_BINDING()

  public:

  char m_au_fname[21];

  ULONG l_fnameStatus;

  char m_au_lname[41];

  ULONG l_lnameStatus;

  char m_au_city[21];

  ULONG l_cityStatus;

  char m_au_state[3];

  ULONG l_stateStatus;

  };
  注意,将 BEGIN_ADO_BINDING 和 END_ADO_BINDING 宏之间的绑定条目用括号括起。不要在绑定条目结尾使用逗号或分号,因为这些定界符仅限在宏中使用。
  ADO_VARIABLE_LENGTH_BINDING

  _ENTRY2的参数说明如下:

  参数1:按顺序的字段号码,1为标识记录集中第一字段,2为标识记录集中第二字段,依此类推。

  参数2:储存已转换字段的变量的数据类型。

  参数3:临时的工作缓冲区,用于将字段值从 VARIANT转换为C/C 变量。

  参数4:变长变量所需的字节数。

  参数5:指示字段转换是否成功。

  参数6:布尔标志。如果为 TRUE,则表明 ADO 可以更新绑定的字段。如只检查字段而不将其更改,可设置为 FALSE。

  其中第5个参数为状态参数,它可告诉你从 Recordset 字段到C或C 变量的转换是否成功以及变量的内容是否有效。该参数的两个最重要的值是adFldOK(意味着转换成功)和adFldNull(意味着字段是NULL,即无值可供转换)。程序中要检测该参数以决定C或C 变量是否有效。例如,如果字段具有有效的行内容,状态将会是adFldOK,如果移动到另一个字段为 NULL 的行,则状态将是 adFldNull。

  源程序代码如下:

  #import "C:\Program Files\Common Files\System\ADO\msado15.dll" \

  no_namespace rename("EOF", "EndOfFile")

  #include 〈stdio.h〉

  #include 〈ole2.h〉

  #include "ADOtest.h"

  void main()

  {

   if(FAILED(::CoInitialize(NULL)))

   return;

   // 定义ADO 智能指针类的实例,并初始化

   RecordsetPtr pRstAuthors = NULL;

  //定义其它变量

  //接口指针声明

  IADORecordBinding picRs = NULL; CAuthorsRs authorsrs;

  //ADO函数要返回HRESULT,宏代码可以帮我们解释HRESULT的含义

  HRESULT hr;  

  // 打开 位于nt_sqlserver服务器上的 pubs数据库中的 Authors 表

   bstr_t strCnn("Provider=sqloledb;Data Source=nt_sqlserver;"

   "Initial Catalog=pubs;User Id=sa;Password=;");

  try

  {

   // 从 Authors 表中打开记录集

   if FAILED(hr = pRstAuthors.CreateInstance(__uuidof(Recordset)))

   com_issue_error(hr);

  pRstAuthors-〉CursorType = adOpenStatic;

   // 使用 client 游标 ,从而可以使用 AbsolutePosition 属性pRstAuthors-〉CursorLocation = adUseClient;

   pRstAuthors-〉Open("SELECT au_fname, au_lname, city, "

   "state FROM Authors ORDER BY au_id", strCnn, adOpenStatic,

   adLockReadOnly, adCmdText);

   // 打开一个 IADORecordBinding 接口指针(用来对记录集和C 类的绑定)

   if FAILED(hr = pRstAuthors-〉QueryInterface(_uuidof(IADORecordBinding),(LPVOID)&&picRs))

_com_issue_error(hr);

   // 调用 BindToRecordset 接口方法可使 Recordset 字段关联(或绑定)到C/C 变量,无论何时更改 Recordset 对象的当前行,C/C 变量都将自动更新

   if FAILED(hr = picRs-〉BindToRecordset(&&authorsrs))

_com_issue_error(hr);

   pRstAuthors-〉MoveFirst();

   while(true)

   {

   // 显示当前记录的信息

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS