Columnas del conjunto de resultados de enlace
Las aplicaciones pueden enlazar tantas columnas del conjunto de resultados como elijan, e incluso pueden no enlazar ninguna columna en absoluto. Cuando se captura una fila de datos, el controlador devuelve los datos de las columnas enlazadas a la aplicación. El hecho de que la aplicación enlace todas las columnas del conjunto de resultados depende de la aplicación. Por ejemplo, las aplicaciones que generan informes suelen tener un formato fijo; estas aplicaciones crean un conjunto de resultados que contiene todas las columnas usadas en el informe y, a continuación, enlazan y recuperan los datos de todas estas columnas. En las aplicaciones que muestran pantallas llenas de datos, a veces el usuario puede decidir qué columnas mostrar; estas aplicaciones crean un conjunto de resultados que contiene todas las columnas que podría querer el usuario, pero enlazan y recuperan los datos solo de esas columnas que ha elegido el usuario.
Los datos se pueden recuperar de columnas sin enlazar llamando a SQLGetData. Esta llamada se suele realizar para recuperar datos largos, que a menudo superan la longitud de un único búfer y se deben recuperar en partes.
Las columnas se pueden enlazar en cualquier momento, incluso después de capturar filas. Sin embargo, los nuevos enlaces no surten efecto hasta la próxima vez que se capture una fila; no se aplican a los datos de las filas que ya se han capturado.
Una variable permanece enlazada a una columna hasta que se enlace otra variable a la columna, hasta que la columna se desenlace mediante una llamada a SQLBindCol con un puntero nulo como dirección de la variable, hasta que todas las columnas se desenlacen mediante una llamada a SQLFreeStmt con la opción SQL_UNBIND o hasta que se libere la instrucción. Por este motivo, la aplicación debe asegurarse de que todas las variables enlazadas sigan siendo válidas mientras estén enlazadas. Para obtener más información, consulte Asignar y liberar búferes.
Dado que los enlaces de columna son simplemente información asociada a la estructura de instrucciones, se pueden establecer en cualquier orden. También son independientes del conjunto de resultados. Por ejemplo, supongamos que una aplicación enlaza las columnas del conjunto de resultados generado por la siguiente instrucción SQL:
SELECT * FROM Orders
Si la aplicación ejecuta la instrucción SQL
SELECT * FROM Lines
en el mismo identificador de instrucción, los enlaces de columna del primer conjunto de resultados siguen en vigor porque estos son los enlaces almacenados en la estructura de instrucciones. En la mayoría de los casos, se trata de una práctica de programación no recomendada y debe evitarse. En su lugar, la aplicación debe llamar a SQLFreeStmt con la opción SQL_UNBIND para desenlazar todas las columnas antiguas y, a continuación, enlazar nuevas.