Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De lengte/indicatorbuffer wordt gebruikt om de bytelengte van de gegevens in de gegevensbuffer door te geven of een speciale indicator, zoals SQL_NULL_DATA, die aangeeft dat de gegevens NULL zijn. Afhankelijk van de functie waarin deze wordt gebruikt, wordt een lengte/indicatorbuffer gedefinieerd als een SQLINTEGER of een SQLSMALLINT. Daarom is één argument nodig om het te beschrijven. Als de gegevensbuffer een niet-uitgestelde invoerbuffer is, bevat dit argument de bytelengte van de gegevens zelf of een indicatorwaarde. Het heet vaak StrLen_or_Ind of een soortgelijke naam. Met de volgende code wordt BIJVOORBEELD SQLPutData aanroepen om een buffer vol gegevens door te geven; de bytelengte (ValueLen) wordt rechtstreeks doorgegeven omdat de gegevensbuffer (ValuePtr) een invoerbuffer is.
SQLCHAR ValuePtr[50];
SQLINTEGER ValueLen;
// Call local function to place data in ValuePtr. In ValueLen, return the
// number of bytes of data placed in ValuePtr. If there is not enough
// data, this will be less than 50.
FillBuffer(ValuePtr, sizeof(ValuePtr), &ValueLen);
// Call SQLPutData to send the data to the driver.
SQLPutData(hstmt, ValuePtr, ValueLen);
Als de gegevensbuffer een uitgestelde invoerbuffer, een niet-uitgestelde uitvoerbuffer of een uitvoerbuffer is, bevat het argument het adres van de lengte/indicatorbuffer. Het heet vaak StrLen_or_IndPtr of een soortgelijke naam. Met de volgende code wordt bijvoorbeeld SQLGetData aanroepen om een buffer vol gegevens op te halen; de bytelengte wordt geretourneerd naar de toepassing in de lengte/indicatorbuffer (ValueLenOrInd), waarvan het adres wordt doorgegeven aan SQLGetData omdat de bijbehorende gegevensbuffer (ValuePtr) een niet-uitgestelde uitvoerbuffer is.
SQLCHAR ValuePtr[50];
SQLINTEGER ValueLenOrInd;
SQLGetData(hstmt, 1, SQL_C_CHAR, ValuePtr, sizeof(ValuePtr), &ValueLenOrInd);
Tenzij dit specifiek verboden is, kan een argument voor de lengte/indicatorbuffer 0 zijn (indien niet-uitgestelde invoer) of een null-aanwijzer (als uitvoer of uitgestelde invoer). Voor invoerbuffers zorgt dit ervoor dat het stuurprogramma de bytelengte van de gegevens negeert. Dit retourneert een fout bij het doorgeven van gegevens van variabele lengte, maar is gebruikelijk bij het doorgeven van niet-null- en vaste-lengtegegevens, omdat er geen lengte of indicatorwaarde nodig is. Voor uitvoerbuffers zorgt dit ervoor dat het stuurprogramma de bytelengte van de gegevens of een indicatorwaarde niet retourneert. Dit is een fout als de gegevens die door het stuurprogramma worden geretourneerd NULL zijn, maar dit is gebruikelijk bij het ophalen van gegevens met vaste lengte die niet null kunnen zijn, omdat noch een lengte, noch een indicatorwaarde nodig is.
Net als wanneer het adres van een uitgestelde gegevensbuffer wordt doorgegeven aan het stuurprogramma, moet het adres van een uitgestelde lengte/indicatorbuffer geldig blijven totdat de buffer niet-afhankelijk is.
De volgende lengten zijn geldig als lengte-/indicatorwaarden:
n, waarbij n> 0.
-
SQL_NTS. Een tekenreeks die naar het stuurprogramma in de bijbehorende gegevensbuffer wordt verzonden, is null-beëindigd; dit is een handige manier voor C-programmeurs om tekenreeksen door te geven zonder hun bytelengte te hoeven berekenen. Deze waarde is alleen legaal wanneer de toepassing gegevens naar het stuurprogramma verzendt. Wanneer het stuurprogramma gegevens naar de toepassing retourneert, wordt altijd de werkelijke bytelengte van de gegevens geretourneerd.
De volgende waarden zijn geldig als lengte-/indicatorwaarden. SQL_NULL_DATA wordt opgeslagen in het SQL_DESC_INDICATOR_PTR descriptorveld; alle andere waarden worden opgeslagen in het SQL_DESC_OCTET_LENGTH_PTR descriptorveld.
SQL_NULL_DATA. De gegevens zijn een NULL-gegevenswaarde en de waarde in de bijbehorende gegevensbuffer wordt genegeerd. Deze waarde is alleen legaal voor SQL-gegevens die worden verzonden naar of opgehaald uit het stuurprogramma.
SQL_DATA_AT_EXEC. De gegevensbuffer bevat geen gegevens. In plaats daarvan worden de gegevens verzonden met SQLPutData wanneer de instructie wordt uitgevoerd of wanneer SQLBulkOperations of SQLSetPos wordt aangeroepen. Deze waarde is alleen legaal voor SQL-gegevens die naar het stuurprogramma worden verzonden. Zie SQLBindParameter, SQLBulkOperations en SQLSetPos voor meer informatie.
Resultaat van de macro SQL_LEN_DATA_AT_EXEC(lengte). Deze waarde is vergelijkbaar met SQL_DATA_AT_EXEC. Zie Lange gegevens verzenden voor meer informatie.
SQL_NO_TOTAL. Het stuurprogramma kan het aantal bytes aan lange gegevens dat nog steeds beschikbaar is om in een uitvoerbuffer te retourneren, niet bepalen. Deze waarde is alleen legaal voor SQL-gegevens die zijn opgehaald uit het stuurprogramma.
SQL_DEFAULT_PARAM. Een procedure is het gebruik van de standaardwaarde van een invoerparameter in een procedure in plaats van de waarde in de bijbehorende gegevensbuffer.
SQL_COLUMN_IGNORE. SQLBulkOperations of SQLSetPos is het negeren van de waarde in de gegevensbuffer. Wanneer u een rij met gegevens bijwerkt door een aanroep naar SQLBulkOperations of SQLSetPos, wordt de kolomwaarde niet gewijzigd. Wanneer u een nieuwe rij met gegevens invoegt door een aanroep naar SQLBulkOperations, wordt de kolomwaarde ingesteld op de standaardwaarde of, als de kolom geen standaardwaarde heeft, op NULL.