Visual C++ 扩展

IADORecordBinding 接口

将 ADO 的 Microsoft Visual C++ 扩展用于将 Recordset 对象的字段关联或绑定到 C/C++ 变量。 每当绑定 Recordset 的当前行 更改时,Recordset 中的所有绑定字段将复制到 C/C++ 变量。 如有必要,复制的数据将转换为 C/C++ 变量的声明数据类型。

IADORecordBinding 接口的 BindToRecordset 方法将字段绑定到 C/C++ 变量。 AddNew 方法将新行添加到绑定的 RecordsetUpdate 方法使用 C/C++ 变量的值填充 Recordset的新行中的字段,或更新现有行中的字段。

IADORecordBinding 接口由 Recordset 对象实现。 你不会自行编写实现代码。

绑定条目

ADO 的 Visual C++ 扩展将 Recordset 对象的字段映射到 C/C++ 变量。 字段和变量之间的映射定义称为 绑定项。 宏为数值、固定长度和可变长度数据提供绑定项。 绑定项和 C/C++ 变量在派生自 Visual C++ Extensions 类的类中声明,CADORecordBindingCADORecordBinding 类是通过绑定项宏在内部地定义的。

ADO 在内部将这些宏中的参数映射到 OLE DB DBBINDING 结构,并创建一个 OLE DB 访问器 对象来管理字段和变量之间的数据的移动和转换。 OLE DB 将数据定义为由三个部分组成:存储数据的 缓冲区;状态,指示字段是否已成功存储在缓冲区中,或者变量应如何还原到该字段;和数据的 长度。 (有关详细信息,请参阅 OLE DB 程序员参考中的 获取和设置数据(OLE DB)

头文件

在应用程序中包括以下文件,以便使用适用于 ADO 的 Visual C++ 扩展:

#include <icrsint.h>

绑定记录集字段

将记录集字段绑定到 C/C++ 变量

  1. 创建派生自 CADORecordBinding 类的类。

  2. 在派生类中指定绑定项和相应的 C/C++ 变量。 将 BEGIN_ADO_BINDINGEND_ADO_BINDING 宏之间的绑定项括起来。 不要用逗号或分号终止宏。 每个宏会自动指定相应的分隔符。

    为每个要映射到 C/C++ 变量的字段指定一个绑定项。 使用来自 ADO_FIXED_LENGTH_ENTRYADO_NUMERIC_ENTRYADO_VARIABLE_LENGTH_ENTRY 宏系列的相应成员。

  3. 在应用程序中,创建派生自 CADORecordBinding的类的实例。 从 Recordset获取 IADORecordBinding 接口。 然后调用 BindToRecordset 方法,将 Recordset 字段绑定到 C/C++ 变量。

有关详细信息,请参阅 Visual C++ 扩展示例

接口方法

IADORecordBinding 接口有三种方法:BindToRecordsetAddNewUpdate。 每个方法的唯一参数是指向派生自 CADORecordBinding的类实例的指针。 因此,AddNewUpdate 方法不能指定其 ADO 方法名称的任何参数。

语法

BindToRecordset 方法将 Recordset 字段与 C/C++ 变量相关联。

BindToRecordset(CADORecordBinding *binding)

AddNew 方法调用其名称,即 ADO AddNew 方法,以向 Recordset添加新行。

AddNew(CADORecordBinding *binding)

Update 方法调用其同名 ADO Update 方法以更新 Recordset(记录集)

Update(CADORecordBinding *binding)

绑定条目宏

绑定项宏定义了 记录集 字段和变量之间的关联。 开始和结束的宏将绑定条目集分隔开。

为固定长度的数据提供宏系列,例如 adDate adBoolean;数值数据,例如 adTinyIntadIntegeradDouble;和可变长度的数据,如 adCharadVarCharadVarBinary。 除 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 更新时,使用了默认值。

另请参阅

Visual C++ 扩展例子Visual C++ 扩展标头