Freigeben über


Binden von Resultsetspalten

Anwendungen können so viele oder nur wenige Spalten des Resultsets binden, wie sie auswählen, einschließlich der Bindung überhaupt keine Spalten. Wenn eine Datenzeile abgerufen wird, gibt der Treiber die Daten für die gebundenen Spalten an die Anwendung zurück. Ob die Anwendung alle Spalten im Resultset bindet, hängt von der Anwendung ab. Beispielsweise haben Anwendungen, die Berichte generieren, in der Regel ein festes Format; Solche Anwendungen erstellen ein Resultset, das alle spalten enthält, die im Bericht verwendet werden, und binden und rufen dann die Daten für alle diese Spalten ab. Anwendungen, die Bildschirme mit voller Daten anzeigen, ermöglichen benutzern manchmal die Entscheidung, welche Spalten angezeigt werden sollen; Solche Anwendungen erstellen ein Resultset, das alle Spalten enthält, die der Benutzer möglicherweise verwenden möchte, binden und abrufen die Daten jedoch nur für die vom Benutzer ausgewählten Spalten.

Daten können aus ungebundenen Spalten abgerufen werden, indem SQLGetData aufgerufen wird. Dies wird häufig aufgerufen, um lange Daten abzurufen, die häufig die Länge eines einzelnen Puffers überschreiten und in Teilen abgerufen werden müssen.

Spalten können jederzeit gebunden werden, auch nachdem Zeilen abgerufen wurden. Die neuen Bindungen werden jedoch erst wirksam, wenn eine Zeile das nächste Mal abgerufen wird; sie werden nicht auf Daten aus bereits abgerufenen Zeilen angewendet.

Eine Variable wird neu Standard an eine Spalte gebunden, bis eine andere Variable an die Spalte gebunden ist, bis die Spalte ungebunden ist, indem SIE SQLBindCol mit einem NULL-Zeiger als Adresse der Variablen aufruft, bis alle Spalten durch Aufrufen von SQLFreeStmt mit der Option SQL_UNBIND oder bis zur Veröffentlichung der Anweisung ungebunden sind. Aus diesem Grund muss die Anwendung sicherstellen, dass alle gebundenen Variablen erneut gültig sind Standard solange sie gebunden sind. Weitere Informationen finden Sie unter "Allocating and Freeing Buffers".

Da Spaltenbindungen nur Informationen sind, die der Anweisungsstruktur zugeordnet sind, können sie in beliebiger Reihenfolge festgelegt werden. Sie sind auch unabhängig vom Resultset. Angenommen, eine Anwendung bindet die Spalten des Resultsets, die von der folgenden SQL-Anweisung generiert werden:

SELECT * FROM Orders  

Wenn die Anwendung dann die SQL-Anweisung ausführt

SELECT * FROM Lines  

auf demselben Anweisungshandle sind die Spaltenbindungen für das erste Resultset weiterhin wirksam, da es sich dabei um die Bindungen handelt, die in der Anweisungsstruktur gespeichert sind. In den meisten Fällen ist dies eine schlechte Programmierpraxis und sollte vermieden werden. Stattdessen sollte die Anwendung SQLFreeStmt mit der Option SQL_UNBIND aufrufen, um alle alten Spalten zu entbinden und dann neue zu binden.