Teilen über


Datenpufferlänge

Die Anwendung übergibt die Bytelänge des Datenpuffers an den Treiber in einem Argument namens BufferLength oder einem ähnlichen Namen. Beispielsweise gibt die Anwendung im folgenden Aufruf von SQLBindCol die Länge des ValuePtr-Puffers (sizeof(ValuePtr)) an:

SQLCHAR      ValuePtr[50];  
SQLINTEGER   ValueLenOrInd;  
SQLBindCol(hstmt, 1, SQL_C_CHAR, ValuePtr, sizeof(ValuePtr), &ValueLenOrInd);  

Ein Treiber gibt immer die Anzahl der Bytes zurück, nicht die Anzahl der Zeichen, im Argument "Pufferlänge" einer Beliebigen Funktion, die ein Ausgabezeichenfolgenargument enthält.

Datenpufferlängen sind nur für Ausgabepuffer erforderlich; Der Treiber verwendet diese, um zu vermeiden, dass er über das Ende des Puffers schreibt. Der Treiber überprüft jedoch die Datenpufferlänge nur, wenn der Puffer Daten mit variabler Länge enthält, z. B. Zeichen- oder Binärdaten. Wenn der Puffer Daten mit fester Länge enthält, z. B. eine ganze Zahl oder eine Datumsstruktur, ignoriert der Treiber die Datenpufferlänge und geht davon aus, dass der Puffer groß genug ist, um die Daten aufzunehmen. d. h., es schneidet niemals Daten mit fester Länge ab. Daher ist es wichtig, dass die Anwendung einen ausreichend großen Puffer für Daten mit fester Länge zuordnet.

Wenn eine Abkürzung von Nicht-Datenausgabezeichenfolgen auftritt (z. B. der für SQLGetCursorName zurückgegebene Cursorname), ist die zurückgegebene Länge im Argument "Pufferlänge" die maximale Zeichenlänge möglich.

Datenpufferlängen sind für Eingabepuffer nicht erforderlich, da der Treiber nicht in diese Puffer schreibt.

In diesem Abschnitt werden die folgenden Themen behandelt: