Delen via


Buffers

Een buffer is een stukje toepassingsgeheugen dat wordt gebruikt om gegevens door te geven tussen de toepassing en het stuurprogramma. Toepassingsbuffers kunnen bijvoorbeeld worden gekoppeld of gebonden aan resultatensetkolommen met SQLBindCol. Terwijl elke rij wordt opgehaald, worden de gegevens geretourneerd voor elke kolom in deze buffers. Invoerbuffers worden gebruikt om gegevens van de toepassing door te geven aan het stuurprogramma; uitvoerbuffers worden gebruikt om gegevens van het stuurprogramma naar de toepassing te retourneren.

Opmerking

Als een ODBC-functie SQL_ERROR retourneert, is de inhoud van de uitvoerargumenten voor die functie niet gedefinieerd.

Deze discussie betreft zich voornamelijk met buffers van onbepaald type. De adressen van deze buffers worden weergegeven als argumenten van het type SQLPOINTER, zoals het argument TargetValuePtr in SQLBindCol. Sommige items die hier worden besproken, zoals de argumenten die worden gebruikt met buffers, zijn echter ook van toepassing op argumenten die worden gebruikt om tekenreeksen door te geven aan het stuurprogramma, zoals het argument TableName in SQLTables.

Deze buffers komen meestal in paren. Gegevensbuffers worden gebruikt om de gegevens zelf door te geven, terwijl lengte-/indicatorbuffers worden gebruikt om de lengte van de gegevens in de gegevensbuffer door te geven of een speciale waarde zoals SQL_NULL_DATA, wat aangeeft dat de gegevens NULL zijn. De lengte van de gegevens in een gegevensbuffer verschilt van de lengte van de gegevensbuffer zelf. In de volgende afbeelding ziet u de relatie tussen de gegevensbuffer en de lengte/indicatorbuffer.

Gegevensbuffer en lengte/indicatorbuffer

Er is een lengte/indicatorbuffer vereist wanneer de gegevensbuffer variabele lengtegegevens bevat, zoals teken- of binaire gegevens. Als de gegevensbuffer gegevens met een vaste lengte bevat, zoals een geheel getal of datumstructuur, is een lengte/indicatorbuffer alleen nodig om indicatorwaarden door te geven omdat de lengte van de gegevens al bekend is. Als een toepassing een lengte-/indicatorbuffer met gegevens met een vaste lengte gebruikt, negeert het stuurprogramma eventuele lengten die erin worden doorgegeven.

De lengte van zowel de gegevensbuffer als de gegevens die deze bevat, wordt gemeten in bytes, in plaats van tekens. Dit onderscheid is niet belangrijk voor programma's die ANSI-tekenreeksen gebruiken, omdat lengtes in bytes en tekens hetzelfde zijn.

Wanneer de gegevensbuffer een door het stuurprogramma gedefinieerd descriptorveld, het diagnostische veld of kenmerk vertegenwoordigt, moet de toepassing de aard van het functieargument aangeven dat de waarde voor het veld of kenmerk aangeeft. De toepassing doet dit door het argument lengte in te stellen in een functieoproep waarmee het veld of kenmerk wordt ingesteld op een van de volgende waarden. (Hetzelfde geldt voor functies die de waarden van het veld of kenmerk ophalen, met uitzondering dat het argument verwijst naar de waarden die voor de instellingsfunctie zich in het argument zelf bevinden.)

  • Als het functieargument dat aangeeft dat de waarde voor het veld of kenmerk een aanwijzer is naar een tekenreeks, is het argument lengte de lengte van de tekenreeks of SQL_NTS.

  • Als het functieargument dat aangeeft dat de waarde voor het veld of kenmerk een aanwijzer is naar een binaire buffer, plaatst de toepassing het resultaat van de macro SQL_LEN_BINARY_ATTR(lengte) in hetlengteargument. Hiermee wordt een negatieve waarde in het lengteargument geplaatst .

  • Als het functieargument dat de waarde voor het veld of kenmerk aangeeft, een pointer naar een waarde is anders dan een tekenreeks of een binaire string, moet het lengte-argument de waarde SQL_IS_POINTER hebben.

  • Als het functieargument waarmee de waarde voor het veld of kenmerk wordt aangegeven, een waarde met een vaste lengte bevat, wordt het argument lengte waar nodig SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT of SQL_ISI_USMALLINT.

Deze sectie bevat de volgende onderwerpen.