SQLDescribeCol y SQLColAttribute
SQLDescribeCol y SQLColAttribute se usan para recuperar los metadatos del conjunto de resultados. La diferencia entre estas dos funciones es que SQLDescribeCol siempre devuelve las mismas cinco partes de información (nombre de una columna, tipo de datos, precisión, escala y nulabilidad), mientras que SQLColAttribute devuelve un solo fragmento de información solicitado por la aplicación. Sin embargo, SQLColAttribute puede devolver una selección mucho más completa de metadatos, incluida la distinción entre mayúsculas y minúsculas de una columna, el tamaño de pantalla, la portabilidad y la capacidad de búsqueda.
Muchas aplicaciones, especialmente aquellas que solo muestran datos, requieren solo los metadatos devueltos por SQLDescribeCol. Para estas aplicaciones, es más rápido usar SQLDescribeCol que SQLColAttribute porque la información se devuelve en una sola llamada. Otras aplicaciones, especialmente las que actualizan los datos, requieren los metadatos adicionales devueltos por SQLColAttribute y, por tanto, usan ambas funciones. Además, SQLColAttribute admite metadatos específicos del controlador; para obtener más información, vea Tipos de datos específicos del controlador, tipos de descriptores, tipos de información, tipos de diagnóstico y atributos.
Una aplicación puede recuperar los metadatos del conjunto de resultados en cualquier momento después de que se haya preparado o ejecutado una instrucción y antes de que se cierre el cursor sobre el conjunto de resultados. Muy pocas aplicaciones requieren metadatos del conjunto de resultados después de preparar la instrucción y antes de que se ejecute. Si es posible, las aplicaciones deben esperar a recuperar metadatos hasta después de ejecutar la instrucción, ya que algunos orígenes de datos no pueden devolver metadatos para instrucciones preparadas y simular esta funcionalidad en el controlador suele ser un proceso lento. Por ejemplo, el controlador podría generar un conjunto de resultados de fila cero reemplazando la cláusula WHERE de una instrucción SELECT por la cláusula WHERE 1 = 2 y ejecutando la instrucción resultante.
Los metadatos suelen ser costosos de recuperar del origen de datos. Por este motivo, los controladores deben almacenar en caché los metadatos que recuperen del servidor y mantenerlos mientras el cursor sobre el conjunto de resultados esté abierto. Además, las aplicaciones solo deben solicitar los metadatos que necesitan absolutamente.