参见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));