Zuweisen von Speicher

Eine Anwendung kann vor oder nach der Ausführung einer SQL-Anweisung Speicher für Ergebnisse zuweisen. Wenn eine Anwendung die SQL-Anweisung zum ersten Mal vorbereitet oder ausführt, kann sie Informationen zum Resultset einholen, bevor sie Speicher für die Ergebnisse zuweist. Wenn das Resultset beispielsweise unbekannt ist, muss die Anwendung die Anzahl der Spalten abrufen, bevor sie diesen Speicher zuweisen kann.

Um Speicher für eine Spalte von Daten zuzuordnen, ruft die Anwendung SQLBindCol auf und übergibt in diesem Aufruf Folgendes:

  • Den Datentyp, in den die Daten konvertiert werden sollen.

  • Die Adresse eines Ausgabepuffers für die Daten.

    Die Anwendung muss Speicher für diesen Puffer zuweisen, und der Puffer muss so groß sein, dass die Daten in dem Format, in das sie konvertiert werden sollen, darin Platz finden.

  • Die Länge des Ausgabepuffers.

    Dieser Wert wird ignoriert, wenn die zurückgegebenen Daten über eine feste Breite in C verfügen, z. B. eine ganze Zahl, reelle Zahl oder Datumsstruktur.

  • Die Adresse eines Speicherpuffers, in den die Anzahl von Bytes verfügbarer Daten zurückgegeben werden soll.

Eine Anwendung kann auch Resultsetspalten an Arrays von Programmvariablen binden, um das Abrufen von Resultsetzeilen in Blöcken zu unterstützen. Es gibt zwei verschiedene Arten der Arraybindung:

  • Die spaltenweise Bindung ist fertig gestellt, wenn jede Spalte an sein eigenes Array von Variablen gebunden wurde.

    Die spaltenweise Bindung wird angegeben, indem SQLSetStmtAttr aufgerufen wird, wobei Attribute auf SQL_ATTR_ROW_BIND_TYPE und ValuePtr auf SQL_BIND_BY_COLUMN festgelegt wird. Alle Arrays müssen über die gleiche Anzahl von Elementen verfügen.

  • Die zeilenweise Bindung ist fertig gestellt, wenn alle Parameter in der SQL-Anweisung als Einheit an ein Array von Strukturen gebunden wurden, die die einzelnen Variablen für die Parameter enthalten.

    Die zeilenweise Bindung wird angegeben, indem SQLSetStmtAttr aufgerufen wird, wobei Attribute auf SQL_ATTR_ROW_BIND_TYPE und ValuePtr auf die Größe der Struktur festgelegt wird, welche die Variablen zum Speichern der Resultsetspalten enthält.

Die Anwendung legt zudem SQL_ATTR_ROW_ARRAY_SIZE auf die Anzahl der Elemente im Spalten- oder Zeilenarray sowie SQL_ATTR_ROW_STATUS_PTR und SQL_ATTR_ROWS_FETCHED_PTR fest.