Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Överensstämmelse
Version introducerad: ODBC 1.0 Standardefterlevnad: ISO 92
Summary
SQLCancel avbryter bearbetningen av ett sats.
För att avbryta bearbetning av en anslutning eller sats, använd SQLCancelHandle Function.
Syntax
SQLRETURN SQLCancel(
SQLHSTMT StatementHandle);
Arguments
StatementHandle
[Indata] Instruktionshandtag.
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR eller SQL_INVALID_HANDLE.
Diagnostics
När SQLCancel returnerar SQL_ERROR eller SQL_SUCCESS_WITH_INFO kan ett associerat SQLSTATE-värde erhållas genom att anropa SQLGetDiagRec med HandleType SQL_HANDLE_STMT och Handle of StatementHandle. Följande tabell listar de SQLSTATE-värden som vanligtvis returneras av SQLCancel och förklarar var och en i kontexten av denna funktion; notationen "(DM)" föregår beskrivningarna av SQLSTATE som returneras av Driver Manager. Returkoden som är associerad med varje SQLSTATE-värde är SQL_ERROR, om inget annat anges.
| SQLSTATE | Error | Description |
|---|---|---|
| 01000 | Allmän varning | Informationsmeddelande för drivrutinsspecifikt. (Funktionen returnerar SQL_SUCCESS_WITH_INFO.) |
| HY000 | Allmänt fel | Ett fel uppstod för vilket det inte fanns någon specifik SQLSTATE och för vilken ingen implementeringsspecifik SQLSTATE definierades. Felmeddelandet som returneras av SQLGetDiagRec i argumentet *MessageText-buffert beskriver felet och dess orsak. |
| HY001 | Fel vid minnesallokering | Drivrutinen kunde inte allokera minne som krävs för körning eller slutförande av funktionen. |
| HY010 | Funktionssekvensfel | (DM) En asynkront körande funktion anropades för anslutningshandtaget som är associerat med StatementHandle. Denna asynkrona funktion kördes fortfarande när SQLCancel-funktionen anropades. (DM) Avbrytningsoperationen misslyckades eftersom en asynkron operation pågår på ett anslutningshandtag som är kopplat till StatementHandle. |
| HY013 | Minneshanteringsfel | Det gick inte att bearbeta funktionsanropet eftersom det inte gick att komma åt underliggande minnesobjekt, möjligen på grund av minnesbrist. |
| HY018 | Servern avvisade avbrytningsbegäran | Servern avslog avbokningsbegäran. |
| HY117 | Anslutningen pausas på grund av okänt transaktionstillstånd. Endast frånkopplings- och skrivskyddade funktioner tillåts. | (DM) Mer information om pausat tillstånd finns i SQLEndTran-funktion. |
| HYT01 | Tidsgränsen för anslutningen gick ut | Tidsgränsen för anslutningen löpte ut innan datakällan svarade på begäran. Tidsgränsen för anslutningen anges via SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT. |
| IM001 | Drivrutinen stöder inte den här funktionen | (DM) Drivrutinen som är associerad med StatementHandle stöder inte funktionen. |
Comments
SQLCancel kan avbryta följande typer av bearbetning på ett sats:
En funktion som körs asynkront på satsen.
En funktion på ett uttalande som behöver data.
En funktion som körs på satsen i en annan tråd.
I ODBC 2. x, om en applikation anropar SQLCancel när ingen bearbetning sker på satsen, har SQLCancel samma effekt som SQLFreeStmt med SQL_CLOSE-alternativet; detta beteende definieras endast för fullständighet och applikationer bör anropa SQLFreeStmt eller SQLCloseCursor för att stänga kursorer.
När SQLCancel anropas för att avbryta en funktion som körs asynkront i en sats eller en funktion på en sats som behöver data, raderas diagnostiska poster som postas av den funktion som avbryts, och SQLCancel postar sina egna diagnostiska poster; när SQLCancel anropas för att avbryta en funktion som körs på en sats i en annan tråd, rensar den dock inte diagnostikposterna för den avbrutna funktionen och publicerar inte sina egna diagnostiska poster.
Avslutar asynkron bearbetning
Efter att en applikation anropar en funktion asynkront, anropar den funktionen upprepade gånger för att avgöra om den har avslutat bearbetningen. Om funktionen fortfarande bearbetas returnerar den SQL_STILL_EXECUTING. Om funktionen har avslutat bearbetningen returnerar den en annan kod.
Efter varje anrop till funktionen som returnerar SQL_STILL_EXECUTING kan en applikation anropa SQLCancel för att avbryta funktionen. Om avbokningsförfrågan lyckas returnerar föraren SQL_SUCCESS. Det här meddelandet anger inte att funktionen faktiskt avbröts. det anger att avbokningsbegäran bearbetades. När eller om funktionen faktiskt avbryts är drivrutinsberoende och datakällasberoende. Applikationen måste fortsätta anropa den ursprungliga funktionen tills returkoden inte är SQL_STILL_EXECUTING. Om funktionen framgångsrikt avbrutits är returkoden SQL_ERROR och SQLSTATE HY008 (Operation avbryts). Om funktionen slutförde sin normala bearbetning är returkoden SQL_SUCCESS eller SQL_SUCCESS_WITH_INFO om funktionen lyckades eller SQL_ERROR och en SQLSTATE annan än HY008 (Operation avbryten) om funktionen misslyckades.
Note
I ODBC 3.5 behandlas ett anrop till SQLCancel när ingen bearbetning görs på satsen inte som SQLFreeStmt med SQL_CLOSE-alternativet, men har ingen effekt alls. Om du vill stänga en markör ska ett program anropa SQLCloseCursor, inte SQLCancel.
För mer information om asynkron bearbetning, se Asynkron exekvering.
Avbryta funktioner som behöver data
Efter att SQLExecute eller SQLExecDirect returnerat SQL_NEED_DATA och innan data har skickats för alla data-at-exekveringsparametrar kan en applikation anropa SQLCancel för att avbryta satsexekveringen. Efter att satsen har avbrutits kan applikationen anropa SQLExecute eller SQLExecDirect igen. För mer information, se SQLBindParameter.
Efter att SQLBulkOperations eller SQLSetPos returnerat SQL_NEED_DATA och innan data har skickats för alla data-at-exekveringskolumner kan en applikation anropa SQLCancel för att avbryta operationen. Efter att operationen har avbrutits kan applikationen anropa SQLBulkOperations eller SQLSetPos igen; Avbrytning påverkar inte markörens tillstånd eller den aktuella markörpositionen. För mer information, se SQLBulkOperations eller SQLSetPos.
Avbrytande av funktioner som körs på en annan tråd
I en multitrådsapplikation kan applikationen avbryta en funktion som körs på en annan tråd. För att avbryta funktionen anropar applikationen SQLCancel med samma satshandtag som den som används av målfunktionen, men i en annan tråd. Hur funktionen avbryts beror på drivrutinen och operativsystemet. Precis som när man avbryter en funktion som körs asynkront, indikerar returkoden i SQLCancel endast om drivrutinen behandlade förfrågan framgångsrikt. Endast SQL_SUCCESS eller SQL_ERROR kan återlämnas; Ingen diagnostisk information returneras. Om den ursprungliga funktionen avbryts returnerar den SQL_ERROR och SQLSTATE HY008 (Operation avbryten).
Om en SQL-sats körs när SQLCancel anropas i en annan tråd för att avbryta satsexekveringen, är det möjligt att exekveringen lyckas och returnerar SQL_SUCCESS samtidigt som avbrytningen också är framgångsrik. I detta fall antar Driver Manager att markören som öppnas av satsexekveringen stängs av cancel, så applikationen kommer inte kunna använda markören.
För mer information om trådning, se Multitrådning.
Relaterade funktioner
| Mer information om | Se |
|---|---|
| Binda en buffert till en parameter | SQLBindParameter-funktionen |
| Utförande av bulkinsättningar eller uppdateringsoperationer | SQLBulkOperations-funktionen |
| Avbryter en funktion som körs asynkront på ett anslutningshandtag, utöver funktionaliteten i SQLCancel. | SQLCancelHandle-funktionen |
| Exekvering av en SQL-sats | SQLExecDirect-funktionen |
| Köra en förberedd SQL-instruktion | SQLExecute-funktion |
| Frigöra ett satshandtag | SQLFreeStmt |
| Att hämta ett fält i en diagnostisk post eller ett fält i diagnoshuvudet | SQLGetDiagField-funktionen |
| Hämta flera fält i en diagnostikdatastruktur | SQLGetDiagRec-funktion |
| Returnerar nästa parameter för att skicka data för | SQLParamData-funktion |
| Skicka parameterdata vid körning | SQLPutData-funktion |
| Placera markören i en raduppsättning, uppdatera data i raduppsättningen, eller uppdatera eller ta bort data i resultatuppsättningen | SQLSetPos-funktionen |