Condividi tramite


Esecuzione diretta ODBC

L'esecuzione diretta rappresenta la modalità più semplice di esecuzione di un'istruzione. Quando l'istruzione viene inviata per l'esecuzione, l'origine dati la compila in un piano di accesso e quindi esegue tale piano di accesso.

L'esecuzione diretta viene comunemente usata da applicazioni generiche che compilano ed eseguono istruzioni in fase di esecuzione. Ad esempio, il codice seguente compila un'istruzione SQL ed esegue questa istruzione una sola volta:

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

L'esecuzione diretta funziona meglio per le istruzioni che verranno eseguite una sola volta. Il principale svantaggio è che l'istruzione SQL viene analizzata ogni volta che viene eseguita. Inoltre, l'applicazione non può recuperare informazioni sul set di risultati creato dall'istruzione (se presente) finché non viene eseguita l'istruzione; ciò è possibile se l'istruzione viene preparata ed eseguita in due passaggi separati.

Per eseguire direttamente un'istruzione, l'applicazione esegue le azioni seguenti:

  1. Imposta i valori di qualsiasi parametro. Per ulteriori informazioni, vedere Parametri d’istruzione, più avanti in questa sezione.

  2. Chiama SQLExecDirect e lo passa a una stringa contenente l'istruzione SQL.

  3. Quando viene chiamato SQLExecDirect, il driver:

    • modifica l'istruzione SQL per usare la grammatica SQL dell'origine dati senza analizzare l'istruzione; ciò include la sostituzione delle sequenze di escape descritte in Sequenze di escape in ODBC. L'applicazione può recuperare il formato modificato di un'istruzione SQL chiamando SQLNativeSql. Le sequenze di escape non vengono sostituite se l'attributo dell'istruzione SQL_ATTR_NOSCAN è impostato;

    • recupera i valori dei parametri correnti e li converte in base alle esigenze. Per ulteriori informazioni, vedere Parametri d’istruzione, più avanti in questa sezione.

    • invia l'istruzione e i valori dei parametri convertiti all'origine dati per l'esecuzione;

    • Restituisce gli errori. Questi includono diagnosi di sequenza o di stato come SQLSTATE 24000 (stato del cursore non valido), errori sintattici come SQLSTATE 42000 (errore di sintassi o violazione di accesso) ed errori semantici come SQLSTATE 42S02 (tabella o vista di base non trovata).