Direkte Ausführung – ODBC

Direkte Ausführung ist die einfachste Möglichkeit zum Ausführen einer Anweisung. Wenn die Anweisung zur Ausführung übermittelt wird, kompiliert die Datenquelle sie in einen Zugriffsplan und führt diesen Zugriffsplan aus.

Die direkte Ausführung wird häufig von generischen Anwendungen verwendet, die Anweisungen zur Laufzeit erstellen und ausführen. Der folgende Code erstellt beispielsweise eine SQL-Anweisung und führt sie ein einziges Mal aus:

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

Die direkte Ausführung eignet sich am besten für Anweisungen, die ein einziges Mal ausgeführt werden. Der wichtigste Nachteil besteht darin, dass die SQL-Anweisung jedes Mal analysiert wird, wenn sie ausgeführt wird. Darüber hinaus kann die Anwendung erst nach der Ausführung der Anweisung Informationen über das von der Anweisung erstellte Resultset abrufen (sofern vorhanden). Dies ist möglich, wenn die Anweisung in zwei separaten Schritten vorbereitet und ausgeführt wird.

Um eine Anweisung direkt auszuführen, führt die Anwendung die folgenden Aktionen aus:

  1. Legt die Werte aller Parameter fest. Weitere Informationen finden Sie unter "Anweisungsparameter" weiter unten in diesem Abschnitt.

  2. Ruft SQLExecDirect auf und übergibt sie eine Zeichenfolge, die die SQL-Anweisung enthält.

  3. Wenn SQLExecDirect aufgerufen wird, wird der Treiber:

    • Ändert die SQL-Anweisung so, dass die SQL-Grammatik der Datenquelle verwendet wird, ohne die Anweisung zu analysieren; Dies schließt das Ersetzen der escapesequenzen ein, die in Escapesequenzen in ODBC behandelt werden. Die Anwendung kann die geänderte Form einer SQL-Anweisung abrufen, indem SQLNativeSql aufgerufen wird. Escapesequenzen werden nicht ersetzt, wenn das attribut der SQL_ATTR_NOSCAN-Anweisung festgelegt ist.

    • Ruft die aktuellen Parameterwerte ab und konvertiert sie nach Bedarf. Weitere Informationen finden Sie unter "Anweisungsparameter" weiter unten in diesem Abschnitt.

    • Sendet die Anweisung und konvertierte Parameterwerte zur Ausführung an die Datenquelle.

    • Gibt alle Fehler zurück. Dazu gehören Sequenzierungs- oder Zustandsdiagnosen wie SQLSTATE 24000 (Ungültiger Cursorzustand), syntaktische Fehler wie SQLSTATE 42000 (Syntaxfehler oder Zugriffsverletzung) und semantische Fehler wie SQLSTATE 42S02 (Basistabelle oder Ansicht nicht gefunden).