Привязка столбцов результирующего набора
Приложения могут привязать столько или сколько столбцов результирующего набора, включая привязку столбцов вообще. При получении строки данных драйвер возвращает данные для привязанных столбцов к приложению. Независимо от того, привязывает ли приложение все столбцы в результирующем наборе. Например, приложения, создающие отчеты, обычно имеют фиксированный формат; такие приложения создают результирующий набор, содержащий все столбцы, используемые в отчете, а затем привязывают и извлекают данные для всех этих столбцов. Приложения, которые отображают экраны, полные данных, иногда позволяют пользователю решать, какие столбцы следует отображать; такие приложения создают результирующий набор, содержащий все столбцы, которые пользователь может захотеть, но привязывать и извлекать данные только для этих столбцов, выбранных пользователем.
Данные можно извлечь из несвязанных столбцов, вызвав SQLGetData. Обычно это вызывается для получения длинных данных, которые часто превышают длину одного буфера и должны быть извлечены в частях.
Столбцы могут быть привязаны в любое время, даже после получения строк. Однако новые привязки не вступают в силу до следующего момента получения строки; Они не применяются к данным из строк, которые уже извлекаются.
Переменная остается привязанной к столбцу, пока другая переменная не привязана к столбцу, пока столбец не будет отключен путем вызова SQLBindCol с пустым указателем в качестве адреса переменной, пока все столбцы не будут связаны путем вызова SQLFreeStmt с параметром SQL_UNBIND или до тех пор, пока инструкция не будет освобождена. По этой причине приложение должно убедиться, что все привязанные переменные остаются действительными до тех пор, пока они привязаны. Дополнительные сведения см. в разделе "Выделение и освобождение буферов".
Так как привязки столбцов являются просто сведениями, связанными со структурой инструкций, их можно задать в любом порядке. Они также не зависят от результирующих наборов. Например, предположим, что приложение привязывает столбцы результирующего набора, созданного следующей инструкцией SQL:
SELECT * FROM Orders
Если приложение выполняет инструкцию SQL
SELECT * FROM Lines
в том же дескрипторе инструкции привязки столбцов для первого результирующих набора по-прежнему применяются, так как они являются привязками, хранящимися в структуре инструкций. В большинстве случаев это плохая практика программирования и следует избежать. Вместо этого приложение должно вызывать SQLFreeStmt с параметром SQL_UNBIND, чтобы отменить привязку всех старых столбцов и привязать новые.