绑定结果集列
应用程序可以根据需要绑定任意数量的结果集列,包括完全不绑定任何列。 提取数据行后,驱动程序会将绑定列的数据返回到应用程序。 应用程序是否绑定结果集中的所有列取决于应用程序。 例如,生成报告的应用程序通常采用固定格式;此类应用程序创建包含报告中使用的所有列的结果集,然后绑定和检索所有这些列的数据。 显示满屏数据的应用程序有时允许用户决定要显示的列;此类应用程序会创建一个结果集,其中包含用户可能需要的所有列,但仅为用户选择的列绑定和检索数据。
可以通过调用 SQLGetData 从未绑定的列检索数据。 调用此函数通常是为了检索长数据,而长数据的长度往往会超过单个缓冲区的长度,因此必须分为几个部分进行检索。
可以随时绑定列,即使是在提取行之后也不例外。 但是,新绑定直至下一次提取行时才会生效,也不应用于已提取的行中的数据。
变量将一直绑定到列,直至将另一个变量绑定到该列,通过调用 SQLBindCol 取消绑定该列并将空指针作为变量的地址,通过使用 SQL_UNBIND 选项调用 SQLFreeStmt 来取消绑定所有列,或者直至释放语句为止。 因此,应用程序必须确保在绑定期间,所有绑定变量均保持有效。 有关详细信息,请参阅分配和释放缓冲区。
由于列绑定只是与语句结构关联的信息,因此可以按任意顺序进行设置。 而且,列绑定也独立于结果集。 例如,假设应用程序绑定由以下 SQL 语句生成的结果集的列:
SELECT * FROM Orders
如果应用程序在同一语句句柄上执行 SQL 语句,
SELECT * FROM Lines
则第一个结果集的列绑定仍然有效,因为这些绑定存储在语句结构中。 在大多数情况下,这是一种糟糕的编程做法,应尽量避免采用此做法。 相反,应用程序应使用 SQL_UNBIND 选项调用 SQLFreeStmt,以取消绑定所有旧列,然后绑定新列。