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

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

本文简介:选择自 ado_database 的 blog

参见ole db程序员参考附录a:数据类型的更多信息

 

开始绑定条目

begin_ado_binding(class)

 

定长数据:

ado_fixed_length_entry(ordinal, datatype, buffer, status, modify)

ado_fixed_length_entry2(ordinal, datatype, buffer, modify)

数字型数据:

ado_numeric_entry(ordinal, datatype, buffer, precision, scale, status,                                   modify)

ado_numeric_entry2(ordinal, datatype, buffer, precision, scale, modify)

变长数据:

ado_variable_length_entry(ordinal, datatype, buffer, size, status,                                                       length, modify)

ado_variable_length_entry2(ordinal, datatype, buffer, size, status,                                                       modify)

ado_variable_length_entry3(ordinal, datatype, buffer, size, length,                                                       modify)

ado_variable_length_entry4(ordinal, datatype, buffer, size, modify)

 

结束绑定

end_ado_binding()

参数
 描述
 
class
 派生类的名字。
 
ordinal
 从1开始的序号,对应于recordset中的字段。
 
datatype
 与c/c++变量对应的ado数据类型(参见datatypeenum以获得有效数据类型的列表)。如果需要,字段的值会被转换成该类型的值。
 
buffer
 对应的c/c++变量的名字。
 
size
 该c/c++变量的最大字节数。如果是个变长字符串,使用0表示即可。
 
status
 指示变量的名字。该变量用以表示缓冲是否有效,数据转换是否成功。

值adfldok意味着转换成功;adfldnull意味着该字段的值为空。其他可能的值见后面的状态值列表。
 
modify
 逻辑标志。true意味着ado允许利用变量值更新recordset中的字段的值。

设置该值为true将允许更新,如果你只想检查字段的值而不想改变它那么就设置为false。
 
precision
 数字型变量的位数。
 
scale
 数字型变量的小数位数。
 
length
 一个4字节变量的名字。该变量将包含缓冲区中数据的实际长度。
 

 

状态值

变量status的值指示了一个字段的值是否被成功的拷贝到了对应的变量中。写数据时,可以给status赋值为adfldnull来指示该字段将被设置为null。

常量
 值
 描述
 
adfldok
 0
 一个非空的字段值被返回。
 
adfldbadaccessor
 1
 绑定无效。
 
adfldcantconvertvalue
 2
 值因为符号不匹配或超界外的原因导致无法被正确转换。
 
adfldnull
 3
 读字段值时,指示一个空值被返回。写字段值时,指示当字段自身无法编码null时该字段将被设置为null。
 
adfldtruncated
 4
 变长数据或数字被截断。
 
adfldsignmismatch
 5
 值是有符号数,而数据类型是无符号数。
 
adflddataoverflow
 6
 数据值超出界限。
 
adfldcantcreate
 7
 不知名的列类型和字段已经被打开。
 
adfldunavailable
 8
 字段值无法确定。比如一个新的未赋值的无缺省值的字段。
 
adfldpermissiondenied
 9
 未被允许更新数据。
 
adfldintegrityviolation
 10
 更新字段时值违反了列的完整性要求。
 
adfldschemaviolation
 11
 更新字段时值违反了列的规范要求。
 
adfldbadstatus
 12
 更新字段时,无效的状态参数。
 
adflddefault
 13
 更新字段时,使用缺省值。
 

 

使用vc++对ado的扩展的示例

在这个例子中,还使用了com专有的“智能指针”功能,它能自动处理iadorecordbinding接口的queryinterface和引用计数。如果没有智能指针,你得这样编码:

iadorecordbinding   *picrs = null;

...

testhr(prs->queryinterface(

          __uuidof(iadorecordbinding), (lpvoid*)&picrs));

...

if (picrs) picrs->release();

使用智能指针,你可以用这样的语句从iadorecordbinding接口派生iadorecordbindingptr类型:

_com_smartptr_typedef(iadorecordbinding, __uuidof(iadorecordbinding));

然后这样实例化指针:

iadorecordbindingptr picrs(prs);

因为vc++的扩展由recordset对象实现,因此智能指针picrs的构造函数使用了_recordsetptr类指针prs。构造函数利用prs调用queryinterface来获得iadorecordbinding接口。

 

// 以下即是示例程序

#import "c:\program files\common files\system\ado\msado15.dll" \

   no_namespace rename("eof", "endoffile")

 

#include <stdio.h>

#include <icrsint.h>

_com_smartptr_typedef(iadorecordbinding, __uuidof(iadorecordbinding));

 

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

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

go top