SQLDescribeCol e SQLColAttribute
SQLDescribeCol e SQLColAttribute são usados para recuperar os metadados do conjunto de resultados. A diferença entre essas duas funções é que SQLDescribeCol sempre retorna as mesmas cinco informações (nome de uma coluna, tipo de dados, precisão, escala e anulabilidade), enquanto SQLColAttribute retorna uma só informação solicitada pelo aplicativo. Porém, SQLColAttribute pode retornar uma seleção muito mais rica de metadados, incluindo a diferenciação de maiúsculas e minúsculas de uma coluna, o tamanho de exibição, a capacidade de atualização e a capacidade de pesquisa.
Muitos aplicativos, especialmente aqueles que exibem apenas dados, exigem apenas os metadados que são retornados pelo SQLDescribeCol. Para esses aplicativos, é mais rápido usar SQLDescribeCol do que SQLColAttribute, pois as informações são retornadas em uma só chamada. Outros aplicativos, especialmente aqueles que atualizam dados, exigem os metadados adicionais retornados por SQLColAttribute, portanto, usam ambas as funções. Além disso, SQLColAttribute dá suporte a metadados específicos do driver. Para obter mais informações, confira Tipos de dados específicos do driver, Tipos de descritores, Tipos de informações, Tipos de diagnóstico e Atributos.
Um aplicativo poderá recuperar metadados do conjunto de resultados a qualquer momento depois que uma instrução tiver sido preparada ou executada e antes que o cursor sobre o conjunto de resultados seja fechado. Muito poucos aplicativos exigem metadados do conjunto de resultados depois que a instrução é preparada e antes de ela ser executada. Se possível, os aplicativos devem aguardar para recuperar metadados até que a instrução seja executada, pois algumas fontes de dados não podem retornar metadados para instruções preparadas, e emular esse recurso no driver geralmente é um processo lento. Por exemplo, o driver pode gerar um conjunto de resultados de linha zero substituindo a cláusula WHERE de uma instrução SELECT pela cláusula WHERE 1 = 2 e executando a instrução resultante.
A recuperação de metadados da fonte de dados geralmente tem um custo alto. Por isso, os drivers devem armazenar em cache todos os metadados recuperados do servidor e mantê-los pelo tempo que o cursor sobre o conjunto de resultados estiver aberto. Além disso, os aplicativos devem solicitar apenas os metadados absolutamente necessários.