Visual C++ 扩展
IADORecordBinding 接口
将 ADO 的 Microsoft Visual C++ 扩展用于将 Recordset 对象的字段关联或绑定到 C/C++ 变量。 每当绑定 Recordset 的当前行 更改时,Recordset 中的所有绑定字段将复制到 C/C++ 变量。 如有必要,复制的数据将转换为 C/C++ 变量的声明数据类型。
IADORecordBinding 接口的 BindToRecordset 方法将字段绑定到 C/C++ 变量。 AddNew 方法将新行添加到绑定的 Recordset。 Update 方法使用 C/C++ 变量的值填充 Recordset的新行中的字段,或更新现有行中的字段。
IADORecordBinding 接口由 Recordset 对象实现。 你不会自行编写实现代码。
绑定条目
ADO 的 Visual C++ 扩展将 Recordset 对象的字段映射到 C/C++ 变量。 字段和变量之间的映射定义称为 绑定项。 宏为数值、固定长度和可变长度数据提供绑定项。 绑定项和 C/C++ 变量在派生自 Visual C++ Extensions 类的类中声明,CADORecordBinding。 CADORecordBinding 类是通过绑定项宏在内部地定义的。
ADO 在内部将这些宏中的参数映射到 OLE DB DBBINDING 结构,并创建一个 OLE DB 访问器 对象来管理字段和变量之间的数据的移动和转换。 OLE DB 将数据定义为由三个部分组成:存储数据的 缓冲区;状态,指示字段是否已成功存储在缓冲区中,或者变量应如何还原到该字段;和数据的 长度。 (有关详细信息,请参阅 OLE DB 程序员参考中的 获取和设置数据(OLE DB)。
头文件
在应用程序中包括以下文件,以便使用适用于 ADO 的 Visual C++ 扩展:
#include <icrsint.h>
绑定记录集字段
将记录集字段绑定到 C/C++ 变量
创建派生自 CADORecordBinding 类的类。
在派生类中指定绑定项和相应的 C/C++ 变量。 将 BEGIN_ADO_BINDING 和 END_ADO_BINDING 宏之间的绑定项括起来。 不要用逗号或分号终止宏。 每个宏会自动指定相应的分隔符。
为每个要映射到 C/C++ 变量的字段指定一个绑定项。 使用来自 ADO_FIXED_LENGTH_ENTRY、ADO_NUMERIC_ENTRY或 ADO_VARIABLE_LENGTH_ENTRY 宏系列的相应成员。
在应用程序中,创建派生自 CADORecordBinding的类的实例。 从 Recordset获取 IADORecordBinding 接口。 然后调用 BindToRecordset 方法,将 Recordset 字段绑定到 C/C++ 变量。
有关详细信息,请参阅 Visual C++ 扩展示例。
接口方法
IADORecordBinding 接口有三种方法:BindToRecordset、AddNew和 Update。 每个方法的唯一参数是指向派生自 CADORecordBinding的类实例的指针。 因此,AddNew 和 Update 方法不能指定其 ADO 方法名称的任何参数。
语法
BindToRecordset 方法将 Recordset 字段与 C/C++ 变量相关联。
BindToRecordset(CADORecordBinding *binding)
AddNew 方法调用其名称,即 ADO AddNew 方法,以向 Recordset添加新行。
AddNew(CADORecordBinding *binding)
Update 方法调用其同名 ADO Update 方法以更新 Recordset(记录集)。
Update(CADORecordBinding *binding)
绑定条目宏
绑定项宏定义了 记录集 字段和变量之间的关联。 开始和结束的宏将绑定条目集分隔开。
为固定长度的数据提供宏系列,例如 adDate 或 adBoolean;数值数据,例如 adTinyInt、adInteger或 adDouble;和可变长度的数据,如 adChar、adVarChar 或 adVarBinary。 除 adVarNumeric之外的所有数值类型也是固定长度类型。 每个家庭都有不同的参数集,这样可以排除不感兴趣的绑定信息。
有关详细信息,请参阅 OLE DB 程序员参考 附录 A:数据类型。
开始绑定条目
BEGIN_ADO_BINDING(类)
Fixed-Length 数据
ADO_FIXED_LENGTH_ENTRY(序号、数据类型、缓冲、状态、修改)
ADO_FIXED_LENGTH_ENTRY2(序号、数据类型、缓冲区、修改)
数值数据
ADO_NUMERIC_ENTRY(序号、数据类型、缓冲区、精度、比例、状态、修改)
ADO_NUMERIC_ENTRY2(序号、数据类型、缓冲区、精度、比例、修改)
Variable-Length 数据
ADO_VARIABLE_LENGTH_ENTRY(序号、数据类型、缓冲区、大小、状态、长度、修改)
ADO_VARIABLE_LENGTH_ENTRY2(序号、数据类型、缓冲区、大小、状态、修改)
ADO_VARIABLE_LENGTH_ENTRY3(序号、DataType、Buffer、Size、Length、Modify)
ADO_VARIABLE_LENGTH_ENTRY4(序号、数据类型、缓冲区、大小、修改)
结束绑定条目
END_ADO_BINDING()
参数 | 描述 |
---|---|
类 | 在其中定义绑定项和 C/C++ 变量的类。 |
序号 | 与您的 C/C++ 变量对应的 Recordset 字段的序号,从1开始计数。 |
DataType | C/C++ 变量的等效 ADO 数据类型(请参阅 DataTypeEnum,了解有效数据类型的列表)。 如有必要,Recordset 字段的值将转换为此数据类型。 |
缓冲区 | C/C++ 变量中用于存储 Recordset 字段的名称。 |
大小 | 缓冲区 的最大大小(以字节为单位)。 如果 Buffer 将包含可变长度字符串,需预留足够的空间以容纳终止空字符。 |
状态 | 变量的名称,该变量指示 Buffer 的内容是否有效,以及字段转换为 DataType 是否成功。 此变量的两个最重要的值 adFldOK,这意味着转换成功;adFldNull,这意味着该字段的值将是VT_NULL类型的 VARIANT,而不仅仅是空。 下一个表“状态值”中列出了 状态 的可能值。 |
修改 | 布尔标志;如果为 TRUE,则指示允许 ADO 使用 Buffer中包含的值更新相应的 Recordset 字段。 将布尔 的 参数设置为 TRUE,以使 ADO 能够更新绑定字段;如果只是查看字段而不进行修改,则设置为 FALSE。 |
精度 | 可在数值变量中表示的数字数。 |
缩放 | 数值变量中的小数位数。 |
长度 | 四字节变量的名称,该变量将包含 Buffer中数据的实际长度。 |
状态值
Status 变量的值指示字段是否已成功复制到变量。
设置数据时,状态 可能设置为 adFldNull,以指示 Recordset 字段应设置为 null。
恒定的 | 价值 | 描述 |
---|---|---|
adFldOK | 0 | 返回了一个非空字段值。 |
adFldBadAccessor | 1 | 绑定无效。 |
adFldCantConvertValue | 2 | 由于符号不匹配或数据溢出以外的原因,无法转换值。 |
adFldNull | 3 | 获取字段时,表示返回的是一个空值。 设置字段时,指示当字段无法 NULL 本身(例如字符数组或整数)进行编码时,该字段应设置为 NULL。 |
adFldTruncated | 4 | 可变长度的数据或数字被截断。 |
字段符号不匹配 | 5 | 值为符号,变量数据类型为无符号。 |
adFldDataOverFlow | 6 | 值大于可以在变量数据类型中存储的值。 |
adFldCantCreate | 7 | 未知的列类型和字段已打开。 |
adFldUnavailable | 8 | 无法确定字段值,例如,在没有默认值的新未分配字段上。 |
权限被拒绝 | 9 | 更新时,无权写入数据。 |
adFldIntegrityViolation | 10 | 更新时,字段值将违反列完整性。 |
adFldSchemaViolation | 11 | 更新时,字段值将违反列架构。 |
adFldBadStatus | 12 | 更新时,状态参数无效。 |
adFldDefault | 13 | 更新时,使用了默认值。 |