分配存储区
应用程序可以在执行 SQL 语句之前或之后为结果分配存储区。如果应用程序首先准备或执行 SQL 语句,则它可以在为结果分配存储区之前询问有关结果集的情况。例如,如果结果集是未知的,则应用程序在为它们分配存储区之前必须先检索列数。
为了使数据列与存储关联,应用程序将调用 SQLBindCol,并向它传递下列项:
数据将要转换成的数据类型。
数据的输出缓冲区的地址。
应用程序必须分配该缓冲区,并且必须足够大以容纳采用转换后目标格式的数据。
输出缓冲区的长度。
如果返回数据在 C 中有固定宽度(比如整数、实数或日期结构),则忽略该值。
用于返回可用数据字节数的存储缓冲区的地址。
应用程序还可以将结果集列绑定到程序变量的数组,以支持分块提取结果集行。数组绑定有两种不同的类型:
当每个列绑定到自身的变量数组时,将完成按列绑定。
通过调用 SQLSetStmtAttr,并将 Attribute 设置为 SQL_ATTR_ROW_BIND_TYPE,而将 ValuePtr 设置为 SQL_BIND_BY_COLUMN,可以指定按列绑定。所有数组的元素个数必须相同。
当 SQL 语句中的所有参数作为一个单元绑定到包含这些参数中各个变量的结构数组时,将完成按行绑定。
通过调用 SQLSetStmtAttr,并将 Attribute 设置为 SQL_ATTR_ROW_BIND_TYPE,而将 ValuePtr 设置为包含用来接收结果集列的变量的结构的大小,可以指定按行绑定。
应用程序还将 SQL_ATTR_ROW_ARRAY_SIZE 设置为列或行数组中的元素个数,并设置 SQL_ATTR_ROW_STATUS_PTR 和 SQL_ATTR_ROWS_FETCHED_PTR。