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.
Important
Dieses Feature wird in einer zukünftigen Version von Windows entfernt. Vermeiden Sie die Verwendung dieses Features in neuer Entwicklungsarbeit, und planen Sie, Anwendungen zu ändern, die dieses Feature derzeit verwenden. Microsoft empfiehlt die Verwendung der Cursorfunktion des Treibers.
Um positionierte Update- und Delete-Anweisungen zu unterstützen, erstellt die Cursor-Bibliothek aus der positionierten Anweisung eine Such- UPDATE oder DELETE Anweisung. Um Aufrufe von SQLGetData in einem Datenblock zu unterstützen, erstellt die Cursorbibliothek eine gesuchte SELECT-Anweisung , um eine Ergebnismenge mit der aktuellen Datenzeile zu erstellen. In jeder dieser Anweisungen zählt die WHERE-Klausel die im Cache gespeicherten Werte für jede gebundene Spalte auf, die SQL_PRED_SEARCHABLE oder SQL_PRED_BASIC für die SQL_DESC_SEARCHABLE Feldkennung in SQLColAttribute zurückgibt.
Caution
Die von der Cursor-Bibliothek erstellte WHERE-Klausel zur Identifizierung der aktuellen Zeile kann keine Zeilen, eine andere Zeile oder mehr als eine Zeile nicht identifizieren.
Wenn eine positionierte Aktualisierungs- oder Delete-Anweisung mehr als eine Zeile betrifft, aktualisiert die Cursor-Bibliothek das Zeilenstatusarray nur für die Zeile, auf der der Cursor positioniert ist, und gibt SQL_SUCCESS_WITH_INFO und SQLSTATE 01001 zurück (Cursor-Operation-Konflikt). Wenn die Anweisung keine Zeilen identifiziert, aktualisiert die Cursor-Bibliothek das Zeilenstatusarray nicht und gibt SQL_SUCCESS_WITH_INFO und SQLSTATE 01001 zurück (Cursor-Operationskonflikt). Eine Anwendung kann SQLRowCount aufrufen, um die Anzahl der aktualisierten oder gelöschten Zeilen zu bestimmen.
Wenn die SELECT-Klausel, die zur Positionierung des Cursors für einen Aufruf von SQLGetData verwendet wird, mehr als eine Zeile identifiziert, ist SQLGetData nicht garantiert, die korrekten Daten zurückzugeben. Wenn keine Zeilen identifiziert werden, gibt SQLGetData SQL_NO_DATA zurück.
Wenn eine Anwendung den folgenden Richtlinien entspricht, sollte die von der Cursor-Bibliothek erstellte WHERE-Klausel die aktuelle Zeile eindeutig identifizieren, außer wenn dies unmöglich ist, etwa wenn die Datenquelle doppelte Zeilen enthält.
Binde Spalten, die die Zeile eindeutig identifizieren. Wenn die gebundenen Spalten die Zeile nicht eindeutig identifizieren, könnte die von der Cursor-Bibliothek erstellte WHERE-Klausel mehr als eine Zeile identifizieren. In einer positionierten Aktualisierungs- oder Löschanweisung kann eine solche Klausel dazu führen, dass mehr als eine Zeile aktualisiert oder gelöscht wird. In einem Aufruf von SQLGetData könnte eine solche Klausel dazu führen, dass der Treiber Daten für die falsche Zeile zurückgibt. Das Binden aller Spalten in einem eindeutigen Schlüssel garantiert, dass jede Zeile eindeutig identifiziert wird.
Teile Datenpuffer zu, die groß genug sind, sodass keine Abschneidung stattfindet. Der Cache der Cursorbibliothek ist eine Kopie der Werte in den Rowset-Puffern, die mit SQLBindCol an die Ergebnismenge gebunden sind. Wenn Daten beim Platzieren in diese Puffer abgeschnitten werden, werden sie auch im Cache abgeschnitten. Eine WHERE-Klausel , die aus trunkierten Werten konstruiert wurde, identifiziert möglicherweise die zugrundeliegende Zeile in der Datenquelle nicht korrekt.
Spezifizieren Sie Puffer mit nicht-nuller Länge für binäre C-Daten. Die Cursorbibliothek weist Längenpuffer in ihrem Cache nur zu, wenn das StrLen_or_IndPtr-Argument in SQLBindCol nicht null ist. Wenn das TargetType-Argument SQL_C_BINARY ist, benötigt die Cursorbibliothek die Länge der Binärdaten, um aus den Daten eine WHERE-Klausel zu konstruieren. Wenn für eine SQL_C_BINARY Spalte kein Längenpuffer vorhanden ist und die Anwendung SQLGetData aufruft oder versucht, eine positionierte Aktualisierungs- oder Löschanweisung auszuführen, gibt die Cursorbibliothek SQL_ERROR und SQLSTATE SL014 zurück (eine positionierte Anfrage wurde gestellt und nicht alle Spaltenzählfelder wurden gepuffert).
Spezifizieren Sie Puffer mit nicht-nuller Länge für nullbare Spalten. Die Cursorbibliothek weist Längenpuffer in ihrem Cache nur zu, wenn das StrLen_or_IndPtr-Argument in SQLBindCol nicht null ist. Da SQL_NULL_DATA im Längenpuffer gespeichert ist, nimmt die Cursorbibliothek an, dass jede Spalte, für die kein Längenpuffer angegeben ist, nicht nullfähig ist. Wenn für eine nullable Spalte keine Längenspalte angegeben ist, erstellt die Cursor-Bibliothek eine WHERE-Klausel , die den Datenwert für die Spalte verwendet. Diese Klausel identifiziert die Zeile nicht korrekt.