SQLExecute függvény

Megfelelőség
Bevezetett verzió: ODBC 1.0 szabványmegfelelőség: ISO 92

Összefoglalás
Az SQLExecute egy előkészített utasítást hajt végre, amely a paramétermarker változók aktuális értékeit használja, ha léteznek paraméterjelzők az utasításban.

Syntax

  
SQLRETURN SQLExecute(  
     SQLHSTMT     StatementHandle);  

Arguments

StatementHandle
[Bemenet] Utasításkezelő.

Returns

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

Diagnostics

Amikor az SQLExecute SQL_ERROR vagy SQL_SUCCESS_WITH_INFO értéket ad, egy hozzárendelt SQLSTATE érték elérhető SQLGetDiagRec hívásával, amely egy SQL_HANDLE_STMT HandleType és egy HandleType of StatementHandle (HandleType) meghívja. Az alábbi táblázat felsorolja az SQLExecute által gyakran visszaadott SQLSTATE értékeket, és mindegyiket ennek a függvénynek a kontextusában magyarázza el; a "(DM)" jelölés megelőzi a Driver Manager által visszaadott SQLSTATE-leírásokat. Az egyes SQLSTATE-értékekhez társított visszatérési kód SQL_ERROR, kivéve, ha másként van feltüntetve.

SQLSTATE Error Description
01000 Általános figyelmeztetés Illesztőprogram-specifikus tájékoztató üzenet. (A függvény SQL_SUCCESS_WITH_INFO ad vissza.)
01001 Kurzorművelet ütközése A StatementHandle által készített utasítás pozicionált frissítési vagy törlési utasítást tartalmazott, és egyetlen sor vagy több sor nem került frissítésre vagy törlésre. (Több sor frissítéséről további információt az SQLSetStmtAttr SQL_ATTR_SIMULATE_CURSOR attribútumának leírásában talál.)

(A függvény SQL_SUCCESS_WITH_INFO ad vissza.)
01003 NULL érték a készletfüggvényben A StatementHandle-hez tartozó előkészített utasítás tartalmazott egy halmazfüggvényt (például AVG, MAX, MIN stb.), de nem a COUNT halmazfüggvényt, és a NULL argumentus értékeket már a függvény alkalmazása előtt eltávolították. (A függvény SQL_SUCCESS_WITH_INFO ad vissza.)
01004 Sztringadatok, jobb csonkolt A kimeneti paraméterhez visszaadott string vagy bináris adatok nem üres karakter vagy nem NULL bináris adatok lerövidítését eredményezték. Ha sztringérték volt, akkor jobbról csonkolt. (A függvény SQL_SUCCESS_WITH_INFO ad vissza.)
01006 A jogosultság nincs visszavonva Az StatementHandle hozzátartozó előkészített nyilatkozat egy REVOKE nyilatkozat volt, és a felhasználó nem rendelkezett a megadott jogosultsággal. (A függvény SQL_SUCCESS_WITH_INFO ad vissza.)
01007 A jogosultság nincs megadva A StatementHandle hozzátartozó kijelentés egy GRANT nyilatkozat volt, és a felhasználó nem kaphatta meg a megadott jogosultságot.
01S02 A beállítás értéke módosult A megadott utasításattribútum a megvalósítási munkafeltételek miatt érvénytelen volt, ezért a rendszer ideiglenesen egy hasonló értéket helyettesített. (Az SQLGetStmtAttr meghívható annak meghatározásához, hogy mi az ideiglenesen helyettesített érték.) A helyettesítő érték az StatementHandle függvényre érvényes, amíg a kurzor be nem záródik, ekkor az utasítás attribútuma visszaáll az előző értékre. A változtatható kijelentés attribútumok: SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_TYPE, SQL_ATTR_KEYSET_SIZE, SQL_ATTR_MAX_LENGTH, SQL_ATTR_MAX_ROWS, SQL_ATTR_QUERY_TIMEOUT és SQL_ATTR_SIMULATE_CURSOR. (A függvény SQL_SUCCESS_WITH_INFO ad vissza.)
01S07 Tört csonkolás A bemeneti/kimeneti vagy kimeneti paraméterhez visszaadott adatokat csonkoltuk, így a numerikus adattípus tört részét csonkoltuk, vagy egy idő, időbélyeg vagy intervallum adattípus időösszetevőjének törtrészét csonkoltuk.

(A függvény SQL_SUCCESS_WITH_INFO ad vissza.)
07002 A DARAB mező helytelen Az SQLBindParameterben megadott paraméterek száma kisebb volt, mint a *StatementTextben található SQL-utasítás paramétereinek száma.

Az SQLBindParametert a ParameterValuePtr null mutatóra, StrLen_or_IndPtr nem SQL_NULL_DATA vagy SQL_DATA_AT_EXEC értékre, az InputOutputType értéke pedig nem SQL_PARAM_OUTPUT, így az SQLBindParameterben megadott paraméterek száma nagyobb volt, mint a *StatementTextben található SQL-utasítás paramétereinek száma.
07006 Korlátozott adattípus-attribútumok megsértése A kötött paraméterHEZ tartozó SQLBindParameterValueType argumentuma által azonosított adatérték nem konvertálható az SQLBindParameterParameterType argumentuma által azonosított adattípusra.

A SQL_PARAM_INPUT_OUTPUT vagy SQL_PARAM_OUTPUT kötött paraméter adatértéke nem konvertálható az SQLBindParameterValueType argumentuma által azonosított adattípusra.

(Ha egy vagy több sor adatértékeit nem sikerült konvertálni, de egy vagy több sort sikeresen visszaadott, ez a függvény SQL_SUCCESS_WITH_INFO ad vissza.)
07007 Korlátozott paraméterérték megsértése A SQL_PARAM_INPUT_OUTPUT_STREAM paramétertípus csak olyan paraméterhez használható, amely adatokat küld és fogad részekben. Ehhez a paramétertípushoz nem engedélyezett bemeneti kötött puffer.

Ez a hiba akkor fordul elő, ha a paraméter típusa SQL_PARAM_INPUT_OUTPUT, és ha az SQLBindParameterben megadott *StrLen_or_IndPtr nem egyenlő SQL_NULL_DATA, SQL_DEFAULT_PARAM, SQL_LEN_DATA_AT_EXEC(len) vagy SQL_DATA_AT_EXEC.
07S01 Az alapértelmezett paraméter használata érvénytelen Egy paraméterérték, amelyet SQLBindParameterrel állítottak be, SQL_DEFAULT_PARAM volt, és a megfelelő paraméter nem volt ODBC kanonikus eljáráshívás paramétere.
08S01 Kommunikációs kapcsolat hibája Az illesztőprogram és az adatforrás közötti kommunikációs kapcsolat, amelyhez az illesztőprogram csatlakoztatva volt, nem sikerült, mielőtt a függvény befejeződött a feldolgozás.
21S02 A származtatott tábla mértéke nem egyezik az oszloplistával A StatementHandle által készített utasítás tartalmazott egy CREATE VIEW utasítást, és a minősítetlen oszloplista (az SQL utasítás oszlopazonosító argumentumában a nézethez megadott oszlopok száma) több nevet tartalmazott, mint az SQL utasítás lekérdezés-specifikációs argumentumával meghatározott származtatott táblázatban szereplő oszlopok száma.
22001 Sztringadatok, jobb csonkolás Egy karakter vagy bináris érték hozzárendelése egy oszlophoz a nem üres (karakter) vagy nem null (bináris) karakterek vagy bájtok lerövidítését eredményezte.
22002 A mutatóváltozó kötelező, de nincs megadva A NULL adatokat egy kimeneti paraméterhez kötötték, amelynek az SQLBindParameter által beállított StrLen_or_IndPtr null mutató volt.
22003 Numerikus érték a tartományon kívül A StatementHandle hozzátartozó előkészített utasítás egy határos numerikus paramétert tartalmazott, és a paraméterérték miatt a szám teljes (nem törtrésze) része lerövidült, amikor a hozzá tartozó táblázatoszlophoz rendelték.

Egy vagy több bemeneti/kimeneti vagy kimeneti paraméter numerikus értékének (számként vagy sztringként) visszaadása miatt a szám egésze (a törtrész helyett) csonkolt lett volna.
22007 Érvénytelen dátum/idő formátum Az StatementHandle-hez tartozó előkészített utasítás tartalmazott egy SQL utasítást, amely egy dátumot, időt vagy időbélyeg-struktúrát tartalmazott kötött paraméterként, és a paraméter pedig érvénytelen dátum, idő vagy időbélyeg volt.

Egy bemeneti/kimeneti vagy kimeneti paraméter egy dátum, idő vagy időbélyeg C struktúrához volt kötve, és a visszaadott paraméter értéke érvénytelen dátum, idő vagy időbélyeg volt. (A függvény SQL_SUCCESS_WITH_INFO ad vissza.)
22008 Datetime mező túlcsordul A StatementHandle által összetartozó előkészített utasítás tartalmazott egy SQL utasítást, amely dátum-idő kifejezést tartalmazott, amely kiszámításkor érvénytelen dátum-, idő- vagy időbélyeg-struktúrát eredményezett.

Egy bemeneti/kimeneti vagy kimeneti paraméterhez kiszámított datetime kifejezés érvénytelen C-struktúrát eredményezett.
22012 Osztás nullával A StatementHandle által készített utasítás egy aritmetikai kifejezést tartalmazott, amely nullával osztást eredményezett.

Egy bemeneti/kimeneti vagy kimeneti paraméterre számított aritmetikai kifejezés nullával való osztást eredményezett.
22015 Intervallummező túlcsordult *Az Utasításszöveg tartalmazott egy pontos numerikus vagy intervallumparamétert, amely az sql-adattípus intervallummá alakításakor jelentős számjegyek elvesztését okozta.

*Az Utasításszöveg egy több mezőt tartalmazó intervallumparamétert tartalmazott, amely egy oszlopban numerikus adattípussá alakítva nem volt ábrázolva a numerikus adattípusban.

*Az StatementText paraméteradatokat tartalmazott, amelyeket egy intervallum SQL-típushoz rendeltek, és a C típus értékét nem ábrázolták az intervallum SQL-típusában.

Ha egy bemeneti/kimeneti vagy kimeneti paramétert adott meg, amely pontos numerikus vagy intervallum TÍPUSÚ SQL-típus volt egy C intervallumtípushoz, jelentős számjegyek elvesztését okozta.

Amikor egy bemeneti/kimeneti vagy kimeneti paramétert hozzárendeltek egy C intervallumstruktúrához, az adatok nem voltak ábrázolva az intervallum adatstruktúrájában.
22018 Érvénytelen karakterérték az öntött specifikációhoz *Az Utasításszöveg tartalmazott egy C típust, amely pontos vagy hozzávetőleges numerikus, dátum/ idő típusú vagy intervallum típusú volt; az oszlop SQL-típusa karakteres adattípus volt; és az oszlop értéke nem a kötött C típus érvényes literálja volt.

Bemeneti/kimeneti vagy kimeneti paraméter visszaadásakor az SQL-típus pontos vagy hozzávetőleges numerikus, dátum- vagy intervallumadat-típus volt; a C típus SQL_C_CHAR; és az oszlop értéke nem a kötött SQL-típus érvényes literálja volt.
22019 Érvénytelen feloldó karakter A StatementHandle-hez tartozó előállítás tartalmazott egy LIKE predikátumot az ESCAPE-szel a WHERE klauzuladékban, és az ESCAPE utáni escape karakter hossza nem volt 1-gyel.
22025 Érvénytelen feloldási sorozat A StatementHandle-hez tartozó előkészített utasítás tartalmazta a "LIKEmintaértékESCAPEescape karaktert" a WHERE záradékban, és az escape karaktert követő karakter nem volt a "%" vagy "_" karakter.
23000 Integritási kényszer megsértése A StatementHandle által összefoglalt nyilatkozat tartalmazott egy paramétert. A paraméter értéke NULL volt a társított táblaoszlopBAN NOT NULL értékként definiált oszlophoz, ismétlődő értéket adott meg egy olyan oszlophoz, amely csak egyedi értékeket tartalmazott, vagy valamilyen más integritási korlátozást megsértett.
24000 Érvénytelen kurzorállapot Az SQLFetch vagy az SQLFetchScroll egy kurzort helyez el az Utasításkezelőn. Ezt a hibát az illesztőprogram-kezelő adja vissza, ha az SQLFetch vagy az SQLFetchScroll nem adott vissza SQL_NO_DATA, és ha az SQLFetch vagy az SQLFetchScroll visszaadta SQL_NO_DATA.

A StatementHandle kurzora nyitva volt.

A StatementHandle által előkészített utasítás egy pozicionált update vagy delete utasítást tartalmazott, és a kurzor az eredményhalmaz kezdete előtt vagy az eredményhalmaz vége után helyezkedett el.
40001 Szerializálási hiba A tranzakció egy erőforrás holtpontja miatt lett visszaállítva egy másik tranzakcióval.
40003 Az utasítás befejezése ismeretlen A társított kapcsolat a függvény végrehajtása során meghiúsult, és a tranzakció állapota nem határozható meg.
42000 Szintaxishiba vagy hozzáférés-megsértés A felhasználónak nem volt engedélye a StatementHandle előkészített utasítás végrehajtására.
44000 A CHECK OPTION megsértése Az StatementHandle-hez tartozó előkészített utasítás egy INSERT megtekintett táblán vagy a megtekintett táblából származtatott táblázaton végzett utasítást tartalmazott, amelyet a WITH CHECK OPTION jelöléssel hoztak létre, így az INSERT utasítás által érintett egy vagy több sor már nem lesz jelen a megtekintett táblában.

A StatementHandle által készített utasítás egy UPDATE megtekintett táblán vagy a megtekintett táblából származó táblázaton végzett utasítást tartalmazott, amelyet a WITH CHECK OPTION jelöléssel hoztak létre, így az UPDATE állítás által érintett egy vagy több sor már nem lesz jelen a megtekintett táblában.
HY000 Általános hiba Hiba történt, amely miatt nem volt konkrét SQLSTATE, és amelyhez nem definiáltak implementációspecifikus SQLSTATE-t. Az SQLGetDiagRec által a *MessageText pufferben visszaadott hibaüzenet leírja a hibát és annak okát.
HY001 Memóriafoglalási hiba Az illesztőprogram nem tudta lefoglalni a függvény végrehajtásának vagy befejezésének támogatásához szükséges memóriát.
HY008 Művelet megszakítva Az aszinkron feldolgozás engedélyezve lett a StatementHandle-ben. A függvény meghívása megtörtént, és a végrehajtás befejezése előtt az SQLCancel vagy az SQLCancelHandle meghívása megtörtént az Utasításkezelőben. Ezután a függvény ismét meghívásra került az Utasításkezelőben.

A függvény meghívása megtörtént, és a végrehajtás befejezése előtt az SQLCancel vagy az SQLCancelHandle egy másik szálról lett meghívva a StatementHandle-ra egy többszálas alkalmazásból.
HY010 Függvényütemezési hiba (DM) A StatementHandle-hez társított kapcsolati leíróhoz aszinkron módon végrehajtó függvény lett meghívva. Ez az aszinkron függvény még mindig futott, amikor az SQLExecute függvényt hívták.

(DM) SQLExecute, SQLExecDirect vagy SQLMoreResults lett meghívva az Utasításkezelőhöz , és SQL_PARAM_DATA_AVAILABLE ad vissza. Ez a függvény az összes streamelt paraméter adatainak lekérése előtt lett meghívva.

(DM) Egy aszinkron módon végrehajtó függvény (nem ez) lett meghívva az StatementHandle-hez , és a függvény meghívásakor továbbra is végrehajtó volt.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations vagy SQLSetPos lett meghívva az Utasításkezelőhöz , és SQL_NEED_DATA. Ezt a függvényt az összes adatvégrehajtási paraméter vagy oszlop adatküldése előtt hívták meg.

(DM) A StatementHandle nem volt előkészítve.
HY013 Memóriakezelési hiba A függvényhívás nem dolgozható fel, mert a mögöttes memóriaobjektumok nem érhetők el, esetleg a memóriahiány miatt.
HY090 Érvénytelen sztring vagy puffer hossza Az SQLBindParameterrel beállított paraméterérték null mutató volt, és a paraméter hossza nem 0, SQL_NULL_DATA, SQL_DATA_AT_EXEC, SQL_DEFAULT_PARAM vagy kisebb, mint SQL_LEN_DATA_AT_EXEC_OFFSET.

Egy paraméterérték, amelyet SQLBindParameter-rel állítottak be, nem volt null mutató; a C adattípus SQL_C_BINARY vagy SQL_C_CHAR volt; és a paraméterhossz értéke kisebb volt 0-nál, de nem volt SQL_NTS, SQL_NULL_DATA, SQL_DEFAULT_PARAM vagy SQL_DATA_AT_EXEC, illetve nem volt kisebb vagy egyenlő SQL_LEN_DATA_AT_EXEC_OFFSET-vel.

Az SQLBindParameter által kötött paraméterhossz értéke SQL_DATA_AT_EXEC; az SQL-típus vagy SQL_LONGVARCHAR, SQL_LONGVARBINARY vagy hosszú adatforrás-specifikus adattípus volt; és az SQLGetInfo SQL_NEED_LONG_DATA_LEN adattípusa "Y" volt.
HY105 Érvénytelen paramétertípus Az SQLBindParameterInputOutputType argumentumához megadott érték SQL_PARAM_OUTPUT, a paraméter pedig egy bemeneti paraméter volt.
HY109 Érvénytelen kurzorpozíció Az előkészített utasítás egy pozicionált frissítés vagy törlés utasítás volt, és a kurzor ( SQLSetPos vagy SQLFetchScroll által) egy olyan sorra helyeződött, amelyet töröltek vagy nem lehetett letölteni.
HY117 A kapcsolat ismeretlen tranzakciós állapot miatt fel van függesztve. Csak a leválasztási és írásvédett függvények engedélyezettek. (DM) A felfüggesztett állapotról további információt az SQLEndTran függvényben talál.
HYC00 A választható funkció nem implementálva Az illesztőprogram vagy az adatforrás nem támogatja a SQL_ATTR_CONCURRENCY és SQL_ATTR_CURSOR_TYPE utasításattribútumok aktuális beállításainak kombinációját.

A SQL_ATTR_USE_BOOKMARKS utasítás attribútuma SQL_UB_VARIABLE lett beállítva, és a SQL_ATTR_CURSOR_TYPE utasítás attribútum olyan kurzortípusra lett beállítva, amelyhez az illesztőprogram nem támogatja a könyvjelzőket.
HYT00 Az időtúllépés lejárt A lekérdezés időtúllépési időtartama lejárt, mielőtt az adatforrás visszaadta az eredményhalmazt. Az időtúllépési időszak az SQLSetStmtAttr SQL_ATTR_QUERY_TIMEOUT keresztül van beállítva.
HYT01 A kapcsolati időkorlát lejárt A kapcsolat időtúllépési időtartama lejárt, mielőtt az adatforrás válaszolt a kérésre. A kapcsolat időtúllépési időszaka az SQLSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT keresztül van beállítva.
IM001 Az illesztőprogram nem támogatja ezt a függvényt (DM) Az StatementHandle-hez társított illesztőprogram nem támogatja a függvényt.
IM017 A lekérdezés aszinkron értesítési módban le van tiltva Az értesítési modell használata esetén a lekérdezés le van tiltva.
IM018 Az SQLCompleteAsync nem lett meghívva az előző aszinkron művelet végrehajtásához ezen a leírón. Ha a leíró előző függvényhívása SQL_STILL_EXECUTING ad vissza, és ha az értesítési mód engedélyezve van, az SQLCompleteAsync-et a leírón kell meghívni a művelet utófeldolgozásához és befejezéséhez.

Az SQLExecute bármilyen SQLPrepare által visszaküldhető SQLSTATE-t vissza tud adni, attól függően, hogy az adatforrás mikor értékeli az adott kijelentéshez tartozó SQL utasítást.

Comments

SQLExecute executes egy SQLPrepare által készített utasítást. Miután az alkalmazás feldolgozza vagy eltávolítja az SQLExecute hívás eredményeit, az alkalmazás ismét új paraméterértékekkel hívhatja az SQLExecute-t . További információért a Előkészített végrehajtásról lásd: Előkészített végrehajtás.

Ahhoz, hogy egy SELECT utasítást többször is végrehajtson, az alkalmazásnak az SQLCloseCursor-t kell hívnia, mielőtt újra végrehajtaná az SELECT utasítást.

Ha az adatforrás manuális commit-módban van (ami explicit tranzakcióindítást igényel), és még nem indítottak tranzakciót, az illesztőprogram tranzakciót indít, mielőtt elküldené az SQL utasítást. További információ: Tranzakciók.

Ha egy alkalmazás SQLPrepare segítségével készít elő, SQLExecute-t pedig COMMIT vagy ROLLBACK utasítás beküldésére, akkor nem lesz interoperabilis a DBMS termékek között. Tranzakció véglegesítéséhez vagy visszaállításához hívja meg az SQLEndTrant.

Ha az SQLExecute találkozik egy adat-végrehajtási paraméterrel, SQL_NEED_DATA ad. Az alkalmazás az adatokat SQLParamData és SQLPutData segítségével küldi. Lásd: SQLBindParameter, SQLParamData, SQLPutData és Sending Long Data.

Ha az SQLExecute egy keresett frissítés, beillesztés vagy törlés utasítást hajt végre, amely nem érinti az adatforrás sorait, az SQLExecute hívása SQL_NO_DATA-t ad vissza.

Ha a SQL_ATTR_PARAMSET_SIZE utasítás attribútumának értéke nagyobb, mint 1, és az SQL utasítás legalább egy paraméterjelölőt tartalmaz, az SQLExecute egyszer hajtja végre az SQL utasítást minden paraméterérték halmazához, amelyekre a *ParameterValuePtr argumentus által az SQLBindParameter hívásaiban mutatott tömbökben. További információ: Paraméterértékek tömbjei.

Ha a könyvjelzők engedélyezve vannak, és olyan lekérdezést hajtanak végre, amely nem támogatja a könyvjelzőket, az illesztőprogramnak meg kell próbálnia kényszeríteni a környezetet egy olyan helyre, amely támogatja a könyvjelzőket azáltal, hogy megváltoztatja az attribútumértéket, és visszaadja az SQLSTATE 01S02 (Opcióérték változott). Ha az attribútumot nem lehet megváltoztatni, az illezsernek vissza kell adnia a SQLSTATE HY024-et (Invalid attribútumérték).

Note

Connection pooling használatakor egy alkalmazás nem futtathat SQL utasításokat, amelyek megváltoztatják az adatbázist vagy az adatbázis kontextusát, például az SQL Server USE adatbázis utasítását, amely megváltoztatja az adatforrás által használt katalógust.

Kódpélda

Lásd SQLBindParameter, SQLBulkOperations, SQLPutData és SQLSetPos.

Információ erről: Nézze
Puffer kötése egy eredményhalmaz oszlopához SQLBindCol függvény
Utasításfeldolgozás megszakítása SQLCancel függvény
A kurzor bezárása SQLCloseCursor Function
Véglegesítési vagy visszaállítási művelet végrehajtása SQLEndTran függvény
SQL utasítás végrehajtása SQLExecDirect függvény
Több adatsor beolvasása SQLFetch függvény
Adatblokk beolvasása vagy egy eredményhalmaz görgetése SQLFetchScroll függvény
Egy utasításkezelő felszabadítása SQLFreeStmt függvény
Kurzornév visszaadása SQLGetCursorName függvény
Adatoszlop egy részének vagy egészének beolvasása SQLGetData függvény
A következő paraméter visszaadása az adatok elküldéséhez: SQLParamData függvény
Utasítás előkészítése végrehajtáshoz SQLPrepare függvény
Paraméteradatok küldése végrehajtási időpontban SQLPutData függvény
Kurzornév beállítása SQLSetCursorName függvény
Utasításattribútum beállítása SQLSetStmtAttr függvény

Lásd még

ODBC API-referencia
ODBC-fejlécfájlok