Teilen über


Datenlänge, Pufferlänge und Abschneiden

Die Datenlänge ist die Bytelänge der Daten, da sie im Datenpuffer der Anwendung gespeichert würde, nicht wie sie in der Datenquelle gespeichert wird. Diese Unterscheidung ist wichtig, da die Daten häufig in unterschiedlichen Typen im Datenpuffer als in der Datenquelle gespeichert werden. Damit Daten an die Datenquelle gesendet werden, ist dies die Bytelänge der Daten vor der Konvertierung in den Datentyp der Datenquelle. Für Daten, die aus der Datenquelle abgerufen werden, ist dies die Bytelänge der Daten nach der Konvertierung in den Typ des Datenpuffers und bevor eine Abkürzung erfolgt.

Bei Daten mit fester Länge, z. B. einer ganzen Zahl oder einer Datumsstruktur, ist die Bytelänge der Daten immer die Größe des Datentyps. Im Allgemeinen weisen Anwendungen einen Datenpuffer zu, der die Größe des Datentyps darstellt. Wenn die Anwendung einen kleineren Puffer zuweist, sind die Folgen nicht definiert, da der Treiber davon ausgeht, dass der Datenpuffer die Größe des Datentyps ist und die Daten nicht abschneiden, damit sie in einen kleineren Puffer passen. Wenn die Anwendung einen größeren Puffer zuweist, wird der zusätzliche Speicherplatz nie verwendet.

Bei Daten mit variabler Länge, z. B. Zeichen- oder Binärdaten, ist es wichtig zu erkennen, dass die Bytelänge der Daten getrennt ist und häufig von der Bytelänge des Puffers unterscheidet. Die Beziehung dieser beiden Längen wird im Abschnitt "Puffer" beschrieben. Wenn die Bytelänge der Daten größer als die Bytelänge des Puffers ist, schneidet der Treiber abgerufene Daten auf die Bytelänge des Puffers ab und gibt SQL_SUCCESS_WITH_INFO mit SQLSTATE 01004 zurück (Daten abgeschnitten). Die zurückgegebene Bytelänge ist jedoch die Länge der nicht erfassten Daten.

Angenommen, eine Anwendung weist 50 Bytes für einen Binären Datenpuffer zu. Wenn der Treiber 10 Byte binärer Daten zurückgibt, gibt er diese 10 Bytes im Puffer zurück. Die Bytelänge der Daten beträgt 10, und die Bytelänge des Puffers beträgt 50. Wenn der Treiber 60 Bytes binärer Daten zurückgibt, schneidet er die Daten auf 50 Bytes ab, gibt diese Bytes im Puffer zurück und gibt SQL_SUCCESS_WITH_INFO zurück. Die Bytelänge der Daten beträgt 60 (die Länge vor dem Abschneiden), und die Bytelänge des Puffers beträgt immer noch 50.

Für jede Spalte, die abgeschnitten wird, wird ein Diagnosedatensatz erstellt. Da es Zeit dauert, bis der Treiber diese Datensätze erstellt hat und die Anwendung sie verarbeiten kann, kann das Abschneiden die Leistung beeinträchtigen. In der Regel kann eine Anwendung dieses Problem vermeiden, indem große Puffer zugeordnet werden, obwohl dies bei der Arbeit mit langen Daten möglicherweise nicht möglich ist. Wenn daten abgeschnitten werden, kann die Anwendung manchmal einen größeren Puffer zuweisen und die Daten zuweisen. Dies trifft in allen Fällen nicht zu. Wenn beim Abrufen von Daten mit Aufrufen von SQLGetData abgeschnitten wird, muss die Anwendung SQLGetData nicht für Daten aufrufen, die bereits zurückgegeben wurden. Weitere Informationen finden Sie unter Getting Long Data.