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.
Net als bij parameters in SQL-instructies kunnen lange gegevens worden verzonden bij het bijwerken van rijen met SQLBulkOperations of SQLSetPos of bij het invoegen van rijen met SQLBulkOperations. De gegevens worden in delen verzonden, met meerdere aanroepen naar SQLPutData. Kolommen waarvoor gegevens tijdens de uitvoering worden verzonden, worden kolommen bij uitvoering genoemd.
Opmerking
Een toepassing kan elk type gegevens tijdens de uitvoering verzenden met SQLPutData, hoewel alleen tekens en binaire gegevens kunnen worden verzonden in delen. Als de gegevens echter klein genoeg zijn om in één buffer te passen, is er doorgaans geen reden om SQLPutData te gebruiken. Het is veel eenvoudiger om de buffer te binden en het stuurprogramma de gegevens uit de buffer te laten ophalen.
Omdat lange gegevenskolommen doorgaans niet gebonden zijn, moet de toepassing de kolom binden voordat sqlBulkOperations of SQLSetPos wordt aangeroepen en deze ontkoppeld na het aanroepen van SQLBulkOperations of SQLSetPos. De kolom moet afhankelijk zijn omdat SQLBulkOperations of SQLSetPos alleen werkt op afhankelijke kolommen en niet-afhankelijk moet zijn, zodat SQLGetData kan worden gebruikt om gegevens op te halen uit de kolom.
Als u gegevens tijdens de uitvoering wilt verzenden, doet de toepassing het volgende:
Hiermee wordt een 32-bits waarde in de rijensetbuffer geplaatst in plaats van een gegevenswaarde. Deze waarde wordt later geretourneerd naar de toepassing, dus de toepassing moet deze instellen op een zinvolle waarde, zoals het nummer van de kolom of de ingang van een bestand met gegevens.
Hiermee stelt u de waarde in de lengte/indicatorbuffer in op het resultaat van de macro SQL_LEN_DATA_AT_EXEC(lengte). Deze waarde geeft aan het stuurprogramma aan dat de gegevens voor de parameter worden verzonden met SQLPutData. De lengtewaarde wordt gebruikt bij het verzenden van lange gegevens naar een gegevensbron die moet weten hoeveel bytes aan lange gegevens er worden verzonden, zodat er vooraf ruimte kan worden toegewezen. Om te bepalen of een gegevensbron deze waarde vereist, roept de toepassing SQLGetInfo aan met de optie SQL_NEED_LONG_DATA_LEN. Alle stuurprogramma's moeten deze macro ondersteunen; als de gegevensbron de bytelengte niet vereist, kan het stuurprogramma deze negeren.
Roept SQLBulkOperations of SQLSetPos aan. Het stuurprogramma detecteert dat een lengte/indicatorbuffer het resultaat bevat van de macro SQL_LEN_DATA_AT_EXEC(lengte) en retourneert SQL_NEED_DATA als de retourwaarde van de functie.
Roept SQLParamData aan als reactie op de SQL_NEED_DATA retourwaarde. Als lange gegevens moeten worden verzonden, retourneert SQLParamData SQL_NEED_DATA. In de buffer waarnaar wordt verwezen door het argument ValuePtrPtr , retourneert het stuurprogramma de unieke waarde die de toepassing in de rijsetbuffer heeft geplaatst. Als er meer dan één kolom voor gegevens bij uitvoering is, gebruikt de toepassing deze waarde om te bepalen voor welke kolom gegevens moeten worden verzonden; het stuurprogramma is niet vereist om gegevens op te vragen voor kolommen voor gegevens bij uitvoering in een bepaalde volgorde.
Roept SQLPutData aan om de kolomgegevens naar het stuurprogramma te verzenden. Als de kolomgegevens niet in één buffer passen, zoals vaak het geval is met lange gegevens, roept de toepassing SQLPutData herhaaldelijk aan om de gegevens in delen te verzenden; het is aan het stuurprogramma en de gegevensbron om de gegevens opnieuw samen te stellen. Als de toepassing null-beëindigde tekenreeksgegevens doorgeeft, moet het stuurprogramma of de gegevensbron het null-beëindigingskarakter verwijderen tijdens het herassembleerproces.
Roept SQLParamData opnieuw aan om aan te geven dat alle gegevens voor de kolom zijn verzonden. Als er kolommen voor gegevens bij uitvoering zijn waarvoor geen gegevens zijn verzonden, retourneert het stuurprogramma SQL_NEED_DATA en de unieke waarde voor de volgende kolom voor gegevens bij uitvoering; de toepassing keert terug naar stap 5. Als er gegevens zijn verzonden voor alle kolommen voor gegevens bij uitvoering, worden de gegevens voor de rij verzonden naar de gegevensbron. SQLParamData retourneert vervolgens SQL_SUCCESS of SQL_SUCCESS_WITH_INFO en kan elke SQLSTATE retourneren die SQLBulkOperations of SQLSetPos kan retourneren.
Nadat SQLBulkOperations of SQLSetPos SQL_NEED_DATA retourneert en voordat de gegevens volledig zijn verzonden voor de laatste kolom tijdens uitvoering, bevindt de instructie zich in de status Gegevens Nodig. In deze status kan de toepassing alleen SQLPutData, SQLParamData, SQLCancel, SQLGetDiagField of SQLGetDiagRec aanroepen; alle andere functies retourneren SQLSTATE HY010 (functiereeksfout). Het aanroepen van SQLCancel annuleert de uitvoering van de instructie en retourneert deze naar de vorige status. Zie bijlage B: ODBC-statusovergangstabellen voor meer informatie.