ADOVC Extensions入门
2008-04-09 04:09:07来源:互联网 阅读 ()
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 宏之间的绑定条目用括号括起。不要在绑定条目结尾使用逗号或分号,因为这些定界符仅限在宏中使用。
_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)
{
// 显示当前记录的信息
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:VisualC 实现二值图像处理
下一篇:用VisualC 打造IE浏览器
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash