Dela via


Databuffertlängd

Programmet skickar bytelängden för databufferten till drivrutinen i ett argument med namnet BufferLength eller ett liknande namn. I följande anrop till SQLBindCol anger programmet till exempel längden på ValuePtr-bufferten (sizeof(ValuePtr)):

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

En drivrutin returnerar alltid antalet byte, inte antalet tecken, i argumentet buffertlängd för en funktion som har ett argument för utdatasträngen.

Databuffertlängder krävs endast för utdatabuffertar. drivrutinen använder dem för att undvika att skriva förbi buffertens slut. Drivrutinen kontrollerar dock endast databuffertens längd när bufferten innehåller data med variabel längd, till exempel tecken eller binära data. Om bufferten innehåller data med fast längd, till exempel ett heltal eller en datumstruktur, ignorerar drivrutinen databuffertens längd och förutsätter att bufferten är tillräckligt stor för att lagra data. D.v.s. trunkerar aldrig data med fast längd. Det är därför viktigt att programmet allokerar en tillräckligt stor buffert för data med fast längd.

När en trunkering av icke-datautdatasträngar inträffar (till exempel namnet på markören som returneras för SQLGetCursorName) är den returnerade längden i buffertlängdsargumentet den maximala teckenlängden möjlig.

Databuffertlängder krävs inte för indatabuffertar eftersom drivrutinen inte skriver till dessa buffertar.

Det här avsnittet innehåller följande avsnitt.