SQLExecute-functie

Conformiteit
Versie geïntroduceerd: NALEVING van ODBC 1.0-standaarden: ISO 92

Samenvatting
SQLExecute voert een voorbereide instructie uit, waarbij de huidige waarden van de parametermarkervariabelen worden gebruikt als er parametermarkers in de instructie aanwezig zijn.

Syntax

  
SQLRETURN SQLExecute(  
     SQLHSTMT     StatementHandle);  

Arguments

StatementHandle
[Invoer] Instructiehandgreep.

Returns

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NEED_DATA, SQL_STILL_EXECUTING, SQL_ERROR, SQL_NO_DATA, SQL_INVALID_HANDLE of SQL_PARAM_DATA_AVAILABLE.

Diagnostics

Wanneer SQLExecute ofwel SQL_ERROR of SQL_SUCCESS_WITH_INFO teruggeeft, kan een bijbehorende SQLSTATE-waarde worden verkregen door SQLGetDiagRec aan te roepen met een HandleType van SQL_HANDLE_STMT en een Handle van StatementHandle. De volgende tabel geeft een overzicht van de SQLSTATE-waarden die vaak door SQLExecute worden geretourneerd en legt elk uit in de context van deze functie; de notatie "(DM)" gaat vooraf aan de beschrijvingen van SQLSTATES die door de Driver Manager worden teruggegeven. De retourcode die is gekoppeld aan elke SQLSTATE-waarde is SQL_ERROR, tenzij anders vermeld.

SQLSTATE Fout Description
01000 Algemene waarschuwing Stuurprogrammaspecifiek informatiebericht. (Functie retourneert SQL_SUCCESS_WITH_INFO.)
01001 Conflict met cursorbewerking De voorbereide instructie die aan de StatementHandle hoorde, bevatte een gepositioneerde update- of delete-instructie, en er werden geen rijen of meer dan één rij bijgewerkt of verwijderd. (Zie de beschrijving van het kenmerk SQL_ATTR_SIMULATE_CURSOR inSQLSetStmtAttr voor meer informatie over updates voor meer dan één rij.)

(Functie retourneert SQL_SUCCESS_WITH_INFO.)
01003 NULL-waarde geëlimineerd in setfunctie De voorbereide instructie die bij StatementHandle hoorde, bevatte een setfunctie (zoals AVG, MAX,MIN, enzovoort), maar niet de COUNT setfunctie, en NULL-argumentwaarden werden geëlimineerd voordat de functie werd toegepast. (Functie retourneert SQL_SUCCESS_WITH_INFO.)
01004 Tekenreeksgegevens, rechts afgekapt String- of binaire gegevens die voor een outputparameter werden teruggegeven, resulteerden in het afkappen van niet-blanco teken- of niet-NULL-binaire gegevens. Als het een tekenreekswaarde was, is deze rechts afgekapt. (Functie retourneert SQL_SUCCESS_WITH_INFO.)
01006 Bevoegdheid niet ingetrokken De voorbereide instructie die bij de StatementHandle hoorde, was een REVOKE instructie, en de gebruiker had niet het gespecificeerde privilege. (Functie retourneert SQL_SUCCESS_WITH_INFO.)
01007 Bevoegdheid niet verleend De voorbereide instructie die bij de StatementHandle hoorde, was een GRANT instructie, en de gebruiker kon het gespecificeerde privilege niet krijgen.
01S02 Optiewaarde gewijzigd Een opgegeven instructiekenmerk is ongeldig vanwege de arbeidsomstandigheden van de implementatie, dus een vergelijkbare waarde is tijdelijk vervangen. (SQLGetStmtAttr kan worden aangeroepen om te bepalen wat de tijdelijk vervangende waarde is.) De vervangende waarde is geldig voor de StatementHandle totdat de cursor is gesloten, waarna het instructiekenmerk wordt teruggezet naar de vorige waarde. De statementattributen die kunnen worden gewijzigd zijn: SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_TYPE, SQL_ATTR_KEYSET_SIZE, SQL_ATTR_MAX_LENGTH, SQL_ATTR_MAX_ROWS, SQL_ATTR_QUERY_TIMEOUT en SQL_ATTR_SIMULATE_CURSOR. (Functie retourneert SQL_SUCCESS_WITH_INFO.)
01S07 Breukafkapping De gegevens die worden geretourneerd voor een invoer-/uitvoer- of uitvoerparameter, zijn afgekapt, zodat het breukgedeelte van een numeriek gegevenstype is afgekapt of het breukgedeelte van het tijdgedeelte van een tijds-, tijdstempel- of intervalgegevenstype is afgekapt.

(Functie retourneert SQL_SUCCESS_WITH_INFO.)
07002 VELD AANTAL is onjuist Het aantal parameters dat is opgegeven in SQLBindParameter , is kleiner dan het aantal parameters in de SQL-instructie in *StatementText.

SQLBindParameter is aangeroepen met ParameterValuePtr ingesteld op een null-aanwijzer, StrLen_or_IndPtr niet ingesteld op SQL_NULL_DATA of SQL_DATA_AT_EXEC, en InputOutputType is niet ingesteld op SQL_PARAM_OUTPUT, zodat het aantal parameters dat is opgegeven in SQLBindParameter groter is dan het aantal parameters in de SQL-instructie in *StatementText.
07006 Schending van kenmerk van beperkt gegevenstype De gegevenswaarde die is geïdentificeerd door het argument ValueType in SQLBindParameter voor de afhankelijke parameter, kan niet worden geconverteerd naar het gegevenstype dat is geïdentificeerd door het argument ParameterType in SQLBindParameter.

De gegevenswaarde die wordt geretourneerd voor een parameter die is gebonden als SQL_PARAM_INPUT_OUTPUT of SQL_PARAM_OUTPUT kan niet worden geconverteerd naar het gegevenstype dat is geïdentificeerd door het argument ValueType in SQLBindParameter.

(Als de gegevenswaarden voor een of meer rijen niet kunnen worden geconverteerd, maar een of meer rijen zijn geretourneerd, retourneert deze functie SQL_SUCCESS_WITH_INFO.)
07007 Schending van beperkte parameterwaarde Het parametertype SQL_PARAM_INPUT_OUTPUT_STREAM wordt alleen gebruikt voor een parameter die gegevens in delen verzendt en ontvangt. Een invoergebonden buffer is niet toegestaan voor dit parametertype.

Deze fout treedt op wanneer het parametertype SQL_PARAM_INPUT_OUTPUT is en wanneer de *StrLen_or_IndPtr die is opgegeven in SQLBindParameter niet gelijk is aan SQL_NULL_DATA, SQL_DEFAULT_PARAM, SQL_LEN_DATA_AT_EXEC(len) of SQL_DATA_AT_EXEC.
07S01 Ongeldig gebruik van standaardparameter Een parameterwaarde, ingesteld met SQLBindParameter, werd SQL_DEFAULT_PARAM, en de overeenkomstige parameter was geen parameter voor een ODBC-canonieke procedure-aanroeping.
08S01 Communicatiekoppelingsfout De communicatiekoppeling tussen het stuurprogramma en de gegevensbron waarmee het stuurprogramma is verbonden, is mislukt voordat de verwerking van de functie is voltooid.
21S02 De mate van afgeleide tabel komt niet overeen met de kolomlijst De voorbereide instructie die bij de StatementHandle hoorde, bevatte een CREATE VIEW statement, en de lijst met ongequalified kolommen (het aantal kolommen dat is gespecificeerd voor de weergave in de kolom-identificatieargumenten van de SQL-instructie) bevatte meer namen dan het aantal kolommen in de afgeleide tabel gedefinieerd door het query-specificatieargument van de SQL-instructie.
22001 Tekenreeksgegevens, juiste afkapping De toewijzing van een teken of binaire waarde aan een kolom resulteerde in het afkappen van niet-lege (teken) of niet-nulle (binaire) tekens of bytes.
22002 Indicatorvariabele vereist, maar niet opgegeven NULL-gegevens waren gebonden aan een uitvoerparameter waarvan StrLen_or_IndPtr ingesteld door SQLBindParameter een null-aanwijzer was.
22003 Numerieke waarde buiten het bereik De voorbereide instructie die aan de StatementHandle gekoppeld was, bevatte een gebonden numerieke parameter, en de parameterwaarde zorgde ervoor dat het hele (in tegenstelling tot fractioneel) deel van het getal werd afgekapt wanneer het aan de bijbehorende kolom werd toegewezen.

Het retourneren van een numerieke waarde (als numeriek of tekenreeks) voor een of meer invoer-/uitvoer- of uitvoerparameters zou ervoor hebben gezorgd dat het gehele (in plaats van fractionele) deel van het getal wordt afgekapt.
22007 Ongeldige datum/tijd-notatie De voorbereide instructie die bij de StatementHandle hoorde, bevatte een SQL-instructie met een datum-, tijd- of tijdstempelstructuur als gebonden parameter, en de parameter was respectievelijk een ongeldige datum, tijd of tijdstempel.

Een invoer-/uitvoer- of uitvoerparameter is gebonden aan een datum-, tijd- of tijdstempel-C-structuur en een waarde in de geretourneerde parameter was respectievelijk een ongeldige datum, tijd of tijdstempel. (Functie retourneert SQL_SUCCESS_WITH_INFO.)
22008 Overloop van datum/tijdveld De voorbereide instructie die bij de StatementHandle hoorde, bevatte een SQL-instructie met een datetime-expressie die, wanneer berekend, resulteerde in een datum-, tijd- of tijdstempelstructuur die ongeldig was.

Een datum/tijd-expressie die is berekend voor een invoer-/uitvoer- of uitvoerparameter heeft geresulteerd in een datum-, tijd- of tijdstempel C-structuur die ongeldig was.
22012 Delen door nul De voorbereide instructie die bij de StatementHandle hoorde, bevatte een rekenkundige uitdrukking die deling door nul veroorzaakte.

Een rekenkundige expressie die wordt berekend voor een invoer-/uitvoer- of uitvoerparameter, heeft geresulteerd in delen door nul.
22015 Intervalveldoverloop *StatementText bevatte een exacte numerieke parameter of intervalparameter die, bij conversie naar een SQL-gegevenstype interval, een verlies van significante cijfers veroorzaakte.

*StatementText bevatte een intervalparameter met meer dan één veld dat, bij conversie naar een numeriek gegevenstype in een kolom, geen weergave had in het numerieke gegevenstype.

*StatementText bevat parametergegevens die zijn toegewezen aan een SQL-intervaltype en er is geen weergave van de waarde van het C-type in het SQL-intervaltype.

Het toewijzen van een invoer-/uitvoer- of uitvoerparameter die een exact numeriek of interval-SQL-type was aan een interval C-type, heeft een verlies van significante cijfers veroorzaakt.

Wanneer een invoer-/uitvoer- of uitvoerparameter is toegewezen aan een interval C-structuur, was er geen weergave van de gegevens in de intervalgegevensstructuur.
22018 Ongeldige tekenwaarde voor cast-specificatie *StatementText bevatte een C-type dat een exacte of geschatte numerieke waarde, een datum/tijd of een intervalgegevenstype was; het SQL-type van de kolom was een gegevenstype voor tekens; en de waarde in de kolom was geen geldige letterlijke waarde van het afhankelijke C-type.

Wanneer een invoer-/uitvoer- of uitvoerparameter is geretourneerd, was het SQL-type een exacte of geschatte numerieke waarde, een datum/tijd of een gegevenstype interval; het C-type is SQL_C_CHAR; en de waarde in de kolom was geen geldige letterlijke waarde van het afhankelijke SQL-type.
22019 Ongeldig escape-teken De voorbereide instructie die bij StatementHandle hoorde, bevatte een LIKE-predicaat met een ESCAPE in de WHERE-clausule, en de lengte van het escape-teken na ESCAPE was niet gelijk aan 1.
22025 Ongeldige escapereeks De voorbereide instructie die bij StatementHandle hoorde, bevatte "LIKEpattern valueESCAPEcharacter" in de WHERE-clausule, en het teken na het escape-teken in de patroonwaarde was niet een van "%" of "_".
23000 Schending van integriteitsbeperking De voorbereide instructie die bij de StatementHandle hoorde, bevatte een parameter. De parameterwaarde was NULL voor een kolom die is gedefinieerd als NOT NULL in de gekoppelde tabelkolom. Er is een dubbele waarde opgegeven voor een kolom die alleen unieke waarden bevat of een andere integriteitsbeperking is geschonden.
24000 Ongeldige cursorstatus Er is een cursor geplaatst op de StatementHandle door SQLFetch of SQLFetchScroll. Deze fout wordt geretourneerd door Driver Manager als SQLFetch of SQLFetchScroll geen SQL_NO_DATA heeft geretourneerd en wordt geretourneerd door het stuurprogramma als SQLFetch of SQLFetchScroll SQL_NO_DATA heeft geretourneerd.

Er stond een cursor open op de StatementHandle.

De voorbereide instructie die bij de StatementHandle hoorde, bevatte een gepositioneerde update- of delete-instructie, en de cursor was gepositioneerd vóór het begin van de resultaatset of na het einde van de resultaatset.
40001 Serialisatiefout De transactie is teruggedraaid vanwege een resource-impasse met een andere transactie.
40003 Voltooiing van instructie onbekend De gekoppelde verbinding is mislukt tijdens de uitvoering van deze functie en de status van de transactie kan niet worden bepaald.
42000 Syntaxisfout of schending van toegang De gebruiker had geen toestemming om de voorbereide instructie uit te voeren die aan de StatementHandle hoorde.
44000 MET SCHENDING VAN CHECK OPTION De voorbereide instructie die bij StatementHandle hoorde, bevatte een INSERT instructie die werd uitgevoerd op een bekeken tabel of een tabel afgeleid van de bekeken tabel die was aangemaakt door MET CHECK OPTION te specificeren, zodat één of meer rijen die door de INSERT instructie worden beïnvloed niet langer aanwezig zullen zijn in de bekeken tabel.

De voorbereide instructie die bij de StatementHandle hoorde, bevatte een UPDATE instructie uitgevoerd op een bekeken tabel of een tabel afgeleid van de bekeken tabel die was aangemaakt door MET CHECK OPTION te specificeren, zodat één of meer rijen die door de UPDATE instructie worden beïnvloed niet langer aanwezig zullen zijn in de beoogde tabel.
HY000 Algemene fout Er is een fout opgetreden waarvoor er geen specifieke SQLSTATE is en waarvoor geen implementatiespecifieke SQLSTATE is gedefinieerd. Het foutbericht dat door SQLGetDiagRec in de *MessageText-buffer wordt geretourneerd, beschrijft de fout en de oorzaak ervan.
HY001 Fout bij geheugentoewijzing Het stuurprogramma kan geen geheugen toewijzen dat nodig is om de uitvoering of voltooiing van de functie te ondersteunen.
HY008 Bewerking geannuleerd Asynchrone verwerking is ingeschakeld voor de StatementHandle. De functie is aangeroepen en voordat de uitvoering is voltooid, werd SQLCancel of SQLCancelHandle aangeroepen op de StatementHandle. Vervolgens werd de functie opnieuw aangeroepen op de StatementHandle.

De functie is aangeroepen en voordat de uitvoering is voltooid, werd SQLCancel of SQLCancelHandle aangeroepen op de StatementHandle vanuit een andere thread in een multithread-toepassing.
HY010 Fout in functiereeks (DM) Er is een asynchroon uitgevoerde functie aangeroepen voor de verbindingsgreep die is gekoppeld aan de StatementHandle. Deze asynchrone functie werd nog uitgevoerd toen de SQLExecute-functie werd aangeroepen.

(DM) SQLExecute, SQLExecDirect of SQLMoreResults werd aangeroepen voor de StatementHandle en geretourneerd SQL_PARAM_DATA_AVAILABLE. Deze functie is aangeroepen voordat gegevens zijn opgehaald voor alle gestreamde parameters.

(DM) Er is een asynchroon uitgevoerde functie (niet deze) aangeroepen voor de StatementHandle en werd nog steeds uitgevoerd toen deze functie werd aangeroepen.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations of SQLSetPos werd aangeroepen voor de StatementHandle en geretourneerd SQL_NEED_DATA. Deze functie is aangeroepen voordat gegevens werden verzonden voor alle parameters of kolommen voor uitvoering van gegevens.

(DM) De StatementHandle was niet voorbereid.
HY013 Fout bij geheugenbeheer De functie-aanroep kan niet worden verwerkt omdat de onderliggende geheugenobjecten niet kunnen worden geopend, mogelijk vanwege weinig geheugen.
HY090 Ongeldige tekenreeks- of bufferlengte Een parameterwaarde, ingesteld met SQLBindParameter, was een null-aanwijzer en de parameterlengtewaarde was niet 0, SQL_NULL_DATA, SQL_DATA_AT_EXEC, SQL_DEFAULT_PARAM of kleiner dan of gelijk aan SQL_LEN_DATA_AT_EXEC_OFFSET.

Een parameterwaarde, ingesteld met SQLBindParameter, was geen nullpointer; het C-datatype was SQL_C_BINARY of SQL_C_CHAR; en de parameterlengte was minder dan 0, maar was niet SQL_NTS, SQL_NULL_DATA, SQL_DEFAULT_PARAM of SQL_DATA_AT_EXEC, of kleiner dan of gelijk aan SQL_LEN_DATA_AT_EXEC_OFFSET.

Een parameterlengtewaarde die door SQLBindParameter is gebonden, is ingesteld op SQL_DATA_AT_EXEC; het SQL-type is SQL_LONGVARCHAR, SQL_LONGVARBINARY of een lang gegevensbronspecifiek gegevenstype; en het SQL_NEED_LONG_DATA_LEN informatietype in SQLGetInfo was 'Y'.
HY105 Ongeldig parametertype De waarde die is opgegeven voor het argument InputOutputType in SQLBindParameter , is SQL_PARAM_OUTPUT en de parameter was een invoerparameter.
HY109 Ongeldige cursorpositie De voorbereide instructie was een positioned update or delete-instructie, en de cursor werd (door SQLSetPos of SQLFetchScroll) geplaatst op een rij die was verwijderd of niet kon worden opgehaald.
HY117 De verbinding is onderbroken vanwege een onbekende transactiestatus. Alleen de verbinding verbreken en alleen-lezenfuncties zijn toegestaan. (DM) Zie SQLEndTran Function voor meer informatie over de onderbroken status.
HYC00 Optionele functie niet geïmplementeerd De combinatie van de huidige instellingen van de SQL_ATTR_CONCURRENCY- en SQL_ATTR_CURSOR_TYPE instructiekenmerken wordt niet ondersteund door het stuurprogramma of de gegevensbron.

Het kenmerk SQL_ATTR_USE_BOOKMARKS instructie is ingesteld op SQL_UB_VARIABLE en het kenmerk SQL_ATTR_CURSOR_TYPE instructie is ingesteld op een cursortype waarvoor het stuurprogramma geen bladwijzers ondersteunt.
HYT00 Time-out verlopen De time-outperiode van de query is verlopen voordat de gegevensbron de resultatenset heeft geretourneerd. De time-outperiode wordt ingesteld via SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT.
HYT01 Time-out voor de verbinding is overschreden De time-outperiode voor de verbinding is verlopen voordat de gegevensbron op de aanvraag heeft gereageerd. De time-outperiode voor de verbinding wordt ingesteld via SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Stuurprogramma biedt geen ondersteuning voor deze functie (DM) Het stuurprogramma dat is gekoppeld aan de StatementHandle biedt geen ondersteuning voor de functie.
IM017 Polling is uitgeschakeld in de asynchrone meldingsmodus Wanneer het meldingsmodel wordt gebruikt, wordt polling uitgeschakeld.
IM018 SQLCompleteAsync is niet aangeroepen om de vorige asynchrone bewerking op deze ingang te voltooien. Als de vorige functieaanroep op de ingang SQL_STILL_EXECUTING retourneert en als de meldingsmodus is ingeschakeld, moet SQLCompleteAsync worden aangeroepen op de ingang om naverwerking te kunnen uitvoeren en de bewerking te voltooien.

SQLExecute kan elke SQLSTATE teruggeven die door SQLPrepare kan worden teruggegeven, gebaseerd op wanneer de databron de SQL-instructie evalueert die bij de instructie hoort.

Comments

SQLExecute voert een instructie uit die door SQLPrepare is opgesteld. Nadat de applicatie de resultaten van een aanroep naar SQLExecute heeft verwerkt of verwijderd, kan de applicatie SQLExecute opnieuw aanroepen met nieuwe parameterwaarden. Voor meer informatie over voorbereide uitvoering, zie Voorbereide uitvoering.

Om een SELECT-instructie meer dan eens uit te voeren, moet de applicatie SQLCloseCursor aanroepen voordat de SELECT-instructie opnieuw wordt uitgevoerd.

Als de databron in handmatige commit-modus is (waarbij expliciete transactiestart vereist is) en een transactie nog niet is gestart, start de driver een transactie voordat het de SQL-instructie verzendt. Zie Transacties voor meer informatie.

Als een applicatie SQLPrepare gebruikt om een COMMIT- of ROLLBACK-instructie voor te bereiden en SQLExecute een COMMIT- of ROLLBACK-instructie in te dienen, zal deze niet interoperabel zijn tussen DBMS-producten. Als u een transactie wilt doorvoeren of terugdraaien, roept u SQLEndTran aan.

Als SQLExecute een data-at-execution-parameter tegenkomt, geeft het SQL_NEED_DATA terug. De applicatie verzendt de gegevens met SQLParamData en SQLPutData. Zie SQLBindParameter, SQLParamData, SQLPutData en Het verzenden van lange gegevens.

Als SQLExecute een doorzocht update-, insert- of delete-instructie uitvoert die geen enkele rij in de databron beïnvloedt, geeft de aanroep naar SQLExecute SQL_NO_DATA terug.

Als de waarde van het SQL_ATTR_PARAMSET_SIZE-statement-attribuut groter is dan 1 en de SQL-instructie ten minste één parametermarker bevat, voert SQLExecute de SQL-instructie één keer uit voor elke set parameterwaarden in de arrays waarnaar het *ParameterValuePtr-argument wijst in de aanroepen van SQLBindParameter. Zie Matrices van parameterwaarden voor meer informatie.

Als bladwijzers zijn ingeschakeld en er wordt een query uitgevoerd die geen bladwijzers kan ondersteunen, moet de driver proberen de omgeving te dwingen naar een omgeving die bladwijzers ondersteunt door een attribuutwaarde te wijzigen en SQLSTATE 01S02 (Optie waarde gewijzigd) terug te geven. Als het attribuut niet kan worden gewijzigd, zou de driver SQLSTATE HY024 (Ongeldige attribuutwaarde) moeten teruggeven.

Note

Bij het gebruik van connection pooling mag een applicatie geen SQL-instructies uitvoeren die de database of de context van de database veranderen, zoals de USE-databasestatement in SQL Server, die de catalogus van een databron verandert.

Codevoorbeeld

Zie SQLBindParameter, SQLBulkOperations, SQLPutData en SQLSetPos.

Voor informatie over Zien!
Een buffer koppelen aan een kolom in een resultatenset SQLBindCol, functie
Verwerking van instructie annuleren SQLCancel, functie
De cursor sluiten SQLCloseCursor-functie
Een doorvoer- of terugdraaibewerking uitvoeren SQLEndTran, functie
Een SQL-instructie uitvoeren SQLExecDirect-functie
Meerdere rijen met gegevens ophalen SQLFetch, functie
Een gegevensblok ophalen of door een resultatenset schuiven SQLFetchScroll, functie
Een statementhandle vrijmaken SQLFreeStmt, functie
Een cursornaam retourneren SQLGetCursorName, functie
Een deel of alle gegevenskolommen ophalen SQLGetData, functie
Retourneert de volgende parameter voor het verzenden van gegevens voor SQLParamData, functie
Een instructie voorbereiden voor uitvoering SQLPrepare, functie
Parametergegevens verzenden tijdens uitvoering SQLPutData, functie
Een cursornaam instellen SQLSetCursorName, functie
Een instructiekenmerk instellen SQLSetStmtAttr, functie

Zie ook

ODBC-API-verwijzing
ODBC-headerbestanden