Partilhar via


Execução direta ODBC

A execução direta é a forma mais simples de executar uma instrução. Quando a declaração é submetida para execução, a fonte de dados compila-a num plano de acesso e depois executa esse plano de acesso.

A execução direta é comumente usada por aplicações genéricas que criam e executam instruções em tempo de execução. Por exemplo, o seguinte código constrói uma instrução SQL e executa-a uma única vez:

SQLCHAR *SQLStatement;  
  
// Build a SQL statement.  
BuildStatement(SQLStatement);  
  
// Execute the statement.  
SQLExecDirect(hstmt, SQLStatement, SQL_NTS);  

A execução direta funciona melhor para instruções que serão executadas uma única vez. A sua principal desvantagem é que a instrução SQL é analisada sempre que é executada. Além disso, a aplicação não pode recuperar informação sobre o conjunto de resultados criado pela instrução (se existir) até depois da execução da instrução; Isto é possível se a declaração for preparada e executada em dois passos separados.

Para executar uma instrução diretamente, a aplicação executa as seguintes ações:

  1. Define os valores de quaisquer parâmetros. Para mais informações, consulte Parâmetros da Instrução, mais à frente nesta secção.

  2. Chama o SQLExecDirect e passa-lhe uma string contendo a instrução SQL.

  3. Quando o SQLExecDirect é chamado, o driver:

    • Modifica a instrução SQL para usar a gramática SQL da fonte de dados sem analisar a instrução; isto inclui a substituição das sequências de escape discutidas em Escape Sequences in ODBC. A aplicação pode recuperar a forma modificada de uma instrução SQL chamando SQLNativeSql. As sequências de escape não são substituídas se o atributo da instrução SQL_ATTR_NOSCAN estiver definido.

    • Recupera os valores atuais dos parâmetros e converte-os conforme necessário. Para mais informações, consulte Parâmetros da Instrução, mais à frente nesta secção.

    • Envia a instrução e os valores convertidos dos parâmetros para a fonte de dados para execução.

    • Devolve quaisquer erros. Estas incluem sequenciação ou diagnósticos de estado, como SQLSTATE 24000 (estado do cursor inválido), erros sintáticos como SQLSTATE 42000 (erro de sintaxe ou violação de acesso), e erros semânticos como SQLSTATE 42S02 (Tabela base ou vista não encontradas).