Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Es gibt vier Möglichkeiten zum Ausführen einer Anweisung, je nachdem, wann sie vom Datenbankmodul kompiliert (vorbereitet) werden und wer sie definiert:
Direkte Ausführung Die Anwendung definiert die SQL-Anweisung. Sie wird zur Laufzeit in einem einzigen Schritt vorbereitet und ausgeführt.
Vorbereitete Ausführung Die Anwendung definiert die SQL-Anweisung. Es wird zur Laufzeit in separaten Schritten vorbereitet und ausgeführt. Die Anweisung kann einmal vorbereitet und mehrmals ausgeführt werden.
Verfahren Die Anwendung kann eine oder mehrere SQL-Anweisungen zur Entwicklungszeit definieren und kompilieren und diese Anweisungen als Prozedur in der Datenquelle speichern. Die Prozedur wird ein- oder mehrmals zur Laufzeit ausgeführt. Die Anwendung kann verfügbare gespeicherte Prozeduren mithilfe von Katalogfunktionen aufzählen.
Katalogfunktionen Der Treiberschreiber erstellt eine Funktion, die eine vordefinierte Ergebnismenge zurückgibt. In der Regel sendet diese Funktion eine vordefinierte SQL-Anweisung oder ruft eine Prozedur auf, die zu diesem Zweck erstellt wurde. Die Funktion wird ein- oder mehrmals zur Laufzeit ausgeführt.
Eine bestimmte Anweisung (wie durch das zugehörigen Anweisungshandle identifiziert) kann beliebig oft ausgeführt werden. Die Anweisung kann mit einer Vielzahl verschiedener SQL-Anweisungen ausgeführt werden, oder sie kann wiederholt mit derselben SQL-Anweisung ausgeführt werden. Der folgende Code verwendet beispielsweise das gleiche Anweisungshandle (hstmt1), um die Tabellen in der Vertriebsdatenbank abzurufen und anzuzeigen. Anschließend wird dieses Handle wiederverwendet, um die Spalten in einer vom Benutzer ausgewählten Tabelle abzurufen.
SQLHSTMT hstmt1;
SQLCHAR * Table;
// Create a result set of all tables in the Sales database.
SQLTables(hstmt1, "Sales", SQL_NTS, "sysadmin", SQL_NTS, NULL, 0, NULL, 0);
// Fetch and display the table names; then close the cursor.
// Code not shown.
// Have the user select a particular table.
SelectTable(Table);
// Reuse hstmt1 to create a result set of all columns in Table.
SQLColumns(hstmt1, "Sales", SQL_NTS, "sysadmin", SQL_NTS, Table, SQL_NTS, NULL, 0);
// Fetch and display the column names in Table; then close the cursor.
// Code not shown.
Der folgende Code zeigt, wie ein einzelnes Handle verwendet wird, um wiederholt dieselbe Anweisung auszuführen, um Zeilen aus einer Tabelle zu löschen.
SQLHSTMT hstmt1;
SQLUINTEGER OrderID;
SQLINTEGER OrderIDInd = 0;
// Prepare a statement to delete orders from the Orders table.
SQLPrepare(hstmt1, "DELETE FROM Orders WHERE OrderID = ?", SQL_NTS);
// Bind OrderID to the parameter for the OrderID column.
SQLBindParameter(hstmt1, 1, SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER, 5, 0,
&OrderID, 0, &OrderIDInd);
// Repeatedly execute hstmt1 with different values of OrderID.
while ((OrderID = GetOrderID()) != 0) {
SQLExecute(hstmt1);
}
Für viele Treiber ist das Zuweisen von Befehlen eine teure Aufgabe, sodass die Wiederverwendung derselben Anweisung auf diese Weise in der Regel effizienter ist als das Freigeben vorhandener Befehle und das Zuweisen neuer Befehle. Anwendungen, die Resultsets für eine Anweisung erstellen, müssen vorsichtig sein, um den Cursor über dem Resultset zu schließen, bevor die Anweisung erneut ausgeführt wird. weitere Informationen finden Sie unter Schließen des Cursors.
Durch die Wiederverwendung von Anweisungen wird die Anwendung gezwungen, eine Begrenzung in einigen Treibern hinsichtlich der Anzahl von gleichzeitig aktiven Anweisungen zu vermeiden. Die genaue Definition von "aktiv" ist an den Treiber gebunden, bezieht sich aber häufig auf jede Anweisung, die vorbereitet oder ausgeführt wurde und weiterhin Ergebnisse verfügbar sind. Wenn beispielsweise eine INSERT-Anweisung vorbereitet wurde, gilt sie in der Regel als aktiv; nachdem eine SELECT-Anweisung ausgeführt wurde und der Cursor noch geöffnet ist, wird sie in der Regel als aktiv angesehen. nachdem eine CREATE TABLE-Anweisung ausgeführt wurde, wird sie im Allgemeinen nicht als aktiv betrachtet.
Eine Anwendung bestimmt, wie viele Anweisungen gleichzeitig auf eine einzelne Verbindung aktiv sein können, indem sie SQLGetInfo mit der Option SQL_MAX_CONCURRENT_ACTIVITIES aufruft. Eine Anwendung kann aktivere Anweisungen als diese Grenze verwenden, indem mehrere Verbindungen zur Datenquelle geöffnet werden. da Verbindungen jedoch teuer sein können, sollte die Auswirkung auf die Leistung berücksichtigt werden.
Anwendungen können die für die Ausführung einer Anweisung zugewiesene Zeit mit dem SQL_ATTR_QUERY_TIMEOUT-Anweisungsattribut einschränken. Wenn der Timeoutzeitraum abläuft, bevor die Datenquelle das Resultset zurückgibt, gibt die Funktion, die die SQL-Anweisung ausführt, SQLSTATE HYT00 zurück (Timeout abgelaufen). Standardmäßig ist kein Timeout vorhanden.
In diesem Abschnitt werden die folgenden Themen behandelt: