Identificadores de instrução
Uma instrução é mais facilmente considerada como uma instrução SQL, como SELECT * FROM Employee. No entanto, uma instrução é mais do que apenas uma instrução SQL - ela consiste em todas as informações associadas a essa instrução SQL, como quaisquer conjuntos de resultados criados pela instrução e parâmetros usados na execução da instrução. Uma instrução nem precisa ter uma instrução SQL definida pelo aplicativo. Por exemplo, quando uma função de catálogo como SQLTables é executada em uma instrução, ela executa uma instrução SQL predefinida que retorna uma lista de nomes de tabelas.
Cada instrução é identificada por um identificador de instrução. Uma instrução está associada a uma única conexão, e pode haver diversas instruções na conexão. Alguns drivers limitam o número de instruções ativas às quais dão suporte. A opção SQL_MAX_CONCURRENT_ACTIVITIES em SQLGetInfo especifica a quantas instruções ativas um driver dá suporte em uma única conexão. Uma instrução será definida como ativa se tiver resultados pendentes, em que os resultados sejam um conjunto de resultados ou a contagem de linhas afetadas por uma instrução INSERT, UPDATE ou DELETE ou os dados estejam sendo enviados com diversas chamadas a SQLPutData.
Em um trecho de código que implementa ODBC (o Gerenciador de Driver ou o driver), o identificador de instrução identifica uma estrutura que contém informações de instrução, como:
O estado da instrução
O diagnóstico atual em nível de instrução
Os endereços das variáveis do aplicativo vinculadas aos parâmetros da instrução e às colunas do conjunto de resultados
As configurações atuais de cada atributo de instrução
Os identificadores de instrução são usados na maioria das funções ODBC. Notavelmente, são usados nas funções para associar parâmetros e colunas do conjunto de resultados (SQLBindParameter e SQLBindCol), preparar e executar instruções (SQLPrepare, SQLExecute e SQLExecDirect), recuperar metadados (SQLColAttribute e SQLDescribeCol), buscar resultados (SQLFetch) e recuperar diagnósticos (SQLGetDiagField e SQLGetDiagRec). Também são usados em funções de catálogo (SQLColumns, SQLTables e assim por diante) e em diversas outras funções.
Os identificadores de instrução são alocados com SQLAllocHandle e liberados com SQLFreeHandle.