Partilhar via


Identificadores de instrução

Uma instrução é mais facilmente pensada como uma instrução SQL, como SELECT * FROM Employee. No entanto, uma instrução é mais do que apenas uma instrução SQL – consiste em toda a informação associada a essa instrução SQL, como quaisquer conjuntos de resultados criados pela instrução e parâmetros usados na execução da mesma instrução. Uma instrução nem sequer precisa de ter uma instrução SQL definida pela aplicação. Por exemplo, quando uma função de catálogo como o SQLTables é executada numa instrução, executa uma instrução SQL pré-definida que devolve 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 podem existir múltiplas instruções nessa conexão. Alguns condutores limitam o número de declarações ativas que suportam; a opção SQL_MAX_CONCURRENT_ACTIVITIES no SQLGetInfo especifica quantas instruções ativas um driver suporta numa única ligação. Uma instrução é definida como ativa se tiver resultados pendentes, onde os resultados são ou um conjunto de resultados ou a contagem de linhas afetadas por uma instrução INSERT,UPDATE ou DELETE , ou dados estão a ser enviados com múltiplas chamadas para SQLPutData.

Dentro de um trecho de código que implementa ODBC (o Gestor de Drivers ou um driver), o identificador da instrução identifica uma estrutura que contém informação da instrução, tais como:

  • O estado da declaração

  • Os diagnósticos atuais ao nível da declaração

  • Os endereços das variáveis de aplicação ligados aos parâmetros da instrução e às colunas do conjunto de resultados

  • As definições atuais de cada atributo de instrução

Os statement handles são usados na maioria das funções ODBC. Notavelmente, são usados nas funções para associar parâmetros e colunas de conjunto de resultados (SQLBindParameter e SQLBindCol), preparar e executar instruções (SQLPrepare, SQLExecute e SQLExecDirect), recuperar metadados (SQLColAttribute e SQLDescribeCol), obter resultados (SQLFetch) e recuperar diagnósticos (SQLGetDiagField e SQLGetDiagRec). Também são usados em funções de catálogo (SQLColumns, SQLTables, etc.) e em várias outras funções.

Os handles das declarações são alocados com SQLAllocHandle e libertados com SQLFreeHandle.