Partilhar via


Execução direta ODBC

A execução direta é o modo mais simples de executar uma instrução. Quando a instrução é enviada para execução, a fonte de dados a compila em um plano de acesso e então executa esse plano de acesso.

A execução direta é comumente usada por aplicativos genéricos que criam e executam instruções em tempo de execução. Por exemplo, o seguinte código cria uma instrução SQL e a executa uma só vez:

SQLCHAR *SQLStatement;  
  
// Build an 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 só vez. A principal desvantagem é que a instrução SQL é analisada sempre que é executada. Além disso, o aplicativo não pode recuperar informações sobre o conjunto de resultados criado pela instrução (se houver) até que a instrução seja executada. Isso será possível se a instrução for preparada e executada em duas etapas separadas.

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

  1. Define os valores de parâmetros. Para obter mais informações, confira Parâmetros de instrução mais adiante nesta seção.

  2. Chama SQLPrepare e a passa em uma cadeia de caracteres contendo a instrução SQL.

  3. Quando SQLExecDirect é chamado, o driver:

    • Modifica a instrução SQL para usar a gramática SQL da fonte de dados sem analisar a instrução. Isso inclui a substituição das sequências de escape discutidas em sequências de escape em ODBC. O aplicativo pode recuperar a forma modificada de uma instrução SQL chamando SQLNativeSql. As sequências de escape não serão substituídas se o atributo de instrução SQL_ATTR_NOSCAN estiver definido.

    • Recupera os valores atuais de parâmetro e os converte conforme necessário. Para obter mais informações, confira Parâmetros de instrução mais adiante nesta seção.

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

    • Retorna um erro. Isso inclui sequenciamento ou diagnóstico de estado, como SQLSTATE 24000 (estado inválido do cursor), erros sintáticos, como SQLSTATE 42000 (erro de sintaxe ou violação de acesso), e erros semânticos, como SQLSTATE 42S02 (tabela base ou exibição não encontrada).