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