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:
Define os valores de parâmetros. Para obter mais informações, confira Parâmetros de instrução mais adiante nesta seção.
Chama SQLPrepare e a passa em uma cadeia de caracteres contendo a instrução SQL.
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).