funkce SQLExecute

Soulad
Zavedená verze: Dodržování standardů ODBC 1.0: ISO 92

Shrnutí
SQLExecute vykoná připravený příkaz a použije aktuální hodnoty proměnných parametrických markerů, pokud ve příkazu existují nějaké parametrické markery.

Syntax

  
SQLRETURN SQLExecute(  
     SQLHSTMT     StatementHandle);  

Arguments

StatementHandle
[Vstup] Popisovač příkazu

Returns

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

Diagnostics

Když SQLExecute vrátí buď SQL_ERROR nebo SQL_SUCCESS_WITH_INFO, lze získat přidruženou hodnotu SQLstate, pokud vyvoláte SQLGetDiagRec s HandleType SQL_HANDLE_STMT a HandleStatementHandle. Následující tabulka uvádí hodnoty SQLSTATE, které SQLExecute běžně vrací, a vysvětluje každou z nich v kontextu této funkce; notace "(DM)" předchází popisům SQLstavů vráceným Správcem ovladačů. Návratový kód přidružený ke každé hodnotě SQLSTATE je SQL_ERROR, pokud není uvedeno jinak.

SQLSTATE Error Description
01000 Obecné upozornění Informační zpráva specifická pro řidiče (Funkce vrátí SQL_SUCCESS_WITH_INFO.)
01001 Konflikt operace kurzoru Připravený příkaz spojený s StatementHandle obsahoval pozicovaný příkaz update nebo delete a žádné řádky ani více než jeden řádek nebyly aktualizovány ani smazány. (Další informace o aktualizacích více než jednoho řádku najdete v popisu atributu SQL_ATTR_SIMULATE_CURSOR v sqlSetStmtAttr.)

(Funkce vrátí SQL_SUCCESS_WITH_INFO.)
01003 Hodnota NULL byla eliminována ve funkci set Připravený příkaz spojený s StatementHandle obsahoval funkci množiny (například AVG, MAX, MIN a podobně), ale ne funkci množiny COUNT , a hodnoty NULL argumentů byly odstraněny před aplikací funkce. (Funkce vrátí SQL_SUCCESS_WITH_INFO.)
01004 Řetězcová data, zkrácená vpravo Řetězcová nebo binární data vrácená pro výstupní parametr vedla k okrácení neprázdných znakových nebo ne-NULL binárních dat. Pokud se jednalo o řetězcovou hodnotu, byla zkrácena doprava. (Funkce vrátí SQL_SUCCESS_WITH_INFO.)
01006 Oprávnění se neodvolal Připravený příkaz spojený s StatementHandle byl REVOKE příkaz a uživatel neměl specifikovaná oprávnění. (Funkce vrátí SQL_SUCCESS_WITH_INFO.)
01007 Oprávnění se neuděluje Připravený příkaz spojený s StatementHandle byl příkazem GRANT a uživateli nebylo možné udělit specifikované oprávnění.
01S02 Změna hodnoty možnosti Zadaný atribut příkazu byl neplatný kvůli pracovním podmínkám implementace, takže podobná hodnota byla dočasně nahrazena. (SqlGetStmtAttr lze volat, abyste zjistili, co je dočasně nahrazená hodnota.) Náhradní hodnota je platná pro StatementHandle , dokud kurzor není uzavřen, v tomto bodě se atribut příkazu vrátí k předchozí hodnotě. Atributy výroku, které lze změnit, jsou: SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_TYPE, SQL_ATTR_KEYSET_SIZE, SQL_ATTR_MAX_LENGTH, SQL_ATTR_MAX_ROWS, SQL_ATTR_QUERY_TIMEOUT a SQL_ATTR_SIMULATE_CURSOR. (Funkce vrátí SQL_SUCCESS_WITH_INFO.)
01S07 Zlomkové zkrácení Data vrácená pro vstupní/výstupní nebo výstupní parametr byla zkrácena tak, aby byla část číselného datového typu zkrácena nebo zlomková část časového prvku času, časového razítka nebo intervalového datového typu zkrácena.

(Funkce vrátí SQL_SUCCESS_WITH_INFO.)
07002 Nesprávné pole COUNT Počet parametrů zadaných v parametru SQLBindParameter byl menší než počet parametrů v příkazu SQL obsaženém v příkazu *StatementText.

Funkce SQLBindParameter byla volána parametrem ParameterValuePtr nastavená na ukazatel null, StrLen_or_IndPtr není nastavena na SQL_NULL_DATA nebo SQL_DATA_AT_EXEC a InputOutputType není nastavena na SQL_PARAM_OUTPUT, takže počet parametrů zadaných v sqlBindParameter byl větší než počet parametrů v příkazu SQL obsažený v *StatementText.
07006 Porušení atributu omezeného datového typu Datová hodnota identifikovaná argumentem ValueType v SQLBindParameter pro vázaný parametr nelze převést na datový typ identifikovaný argumentem ParameterType v SQLBindParameter.

Hodnotu dat vrácenou pro parametr vázaný jako SQL_PARAM_INPUT_OUTPUT nebo SQL_PARAM_OUTPUT nelze převést na datový typ identifikovaný argumentem ValueType v SQLBindParameter.

(Pokud hodnoty dat pro jeden nebo více řádků nebylo možné převést, ale jeden nebo více řádků bylo úspěšně vráceno, vrátí tato funkce SQL_SUCCESS_WITH_INFO.)
07007 Porušení hodnoty parametru s omezeným přístupem Typ parametru SQL_PARAM_INPUT_OUTPUT_STREAM se používá pouze pro parametr, který odesílá a přijímá data v částech. Pro tento typ parametru není povolena vstupní vázaná vyrovnávací paměť.

K této chybě dojde, když je typ parametru SQL_PARAM_INPUT_OUTPUT a pokud *StrLen_or_IndPtr zadaný v sqlBindParameter není roven SQL_NULL_DATA, SQL_DEFAULT_PARAM, SQL_LEN_DATA_AT_EXEC(délka) nebo SQL_DATA_AT_EXEC.
07S01 Neplatné použití výchozího parametru Hodnota parametru nastavená pomocí SQLBindParameter byla SQL_DEFAULT_PARAM a odpovídající parametr nebyl parametrem pro volání kanonického postupu ODBC.
08S01 Selhání komunikačního propojení Komunikační propojení mezi ovladačem a zdrojem dat, ke kterému byl ovladač připojen, selhalo před dokončením zpracování funkce.
21S02 Stupeň odvozené tabulky neodpovídá seznamu sloupců Připravený příkaz spojený s StatementHandle obsahoval CREATE VIEW příkaz a seznam nekvalifikovaných sloupců (počet sloupců specifikovaných pro zobrazení v argumentech identifikátoru sloupců SQL příkazu) obsahoval více jmen než počet sloupců v odvozené tabulce definovaný argumentem dotazu specifikace SQL příkazu.
22001 Řetězcová data, pravé zkrácení Přiřazení znaku nebo binární hodnoty ke sloupci vedlo k okrácení neprázdných (znaků) nebo nenulových (binárních) znaků či bajtů.
22002 Požadovaná proměnná ukazatele, ale není zadána Data NULL byla vázána na výstupní parametr, jehož StrLen_or_IndPtr nastavena sqlBindParameter byl nulový ukazatel.
22003 Číselná hodnota mimo rozsah Připravený příkaz spojený s StatementHandle obsahoval omezený číselný parametr a hodnota parametru způsobila, že celá (na rozdíl od zlomkové) část čísla byla při přiřazení do sloupce tabulky zkrácena.

Vrácení číselné hodnoty (jako číselné nebo řetězce) pro jeden nebo více vstupních/výstupních parametrů by způsobilo zkrácení celé části čísla (na rozdíl od zlomků).
22007 Neplatný formát data a času Připravený příkaz spojený s StatementHandle obsahoval SQL příkaz, který obsahoval strukturu datu, času nebo časového razítka jako bound-parametr, přičemž parametr byl v pořadí neplatné datum, čas nebo časové razítko.

Vstupní/výstupní nebo výstupní parametr byl vázán na strukturu jazyka C data, času nebo časového razítka a hodnota vráceného parametru byla neplatné datum, čas nebo časové razítko. (Funkce vrátí SQL_SUCCESS_WITH_INFO.)
22008 Přetečení pole Datetime Připravený příkaz spojený s StatementHandle obsahoval SQL příkaz, který obsahoval výraz datetime, jenž při výpočtu vedl ke struktuře datu, času nebo časového razítka, která byla neplatná.

Výraz datetime vypočítaný pro vstupní/výstupní nebo výstupní parametr způsobil neplatnou strukturu jazyka C data, času nebo časového razítka.
22012 Dělení nulou Připravené tvrzení spojené s StatementHandle obsahovalo aritmetický výraz, který způsobil dělení nulou.

Aritmetický výraz vypočítaný pro vstupní/výstupní nebo výstupní parametr způsobil dělení nulou.
22015 Přetečení pole intervalu *StatementText obsahoval přesný číselný nebo interval parametr, který při převodu na datový typ SQL intervalu způsobil ztrátu významných číslic.

*PříkazText obsahoval parametr intervalu s více než jedním polem, které při převodu na číselný datový typ ve sloupci nemělo v číselném datovém typu žádnou reprezentaci.

*StatementText obsahovala data parametrů, která byla přiřazena k typu SQL intervalu a nebyla žádná reprezentace hodnoty typu C v intervalu typu SQL.

Přiřazení vstupního/výstupního nebo výstupního parametru, který byl přesným číselným nebo intervalovým typem SQL typu intervalu jazyka C, způsobilo ztrátu významných číslic.

Když byl vstupní/výstupní nebo výstupní parametr přiřazen ke struktuře intervalu C, nebyla v datové struktuře intervalu žádná reprezentace dat.
22018 Neplatná hodnota znaku pro specifikaci přetypování *StatementText obsahoval typ jazyka C, který byl přesný nebo přibližný číselný typ, datum a čas nebo datový typ intervalu; typ SQL sloupce byl datový typ znaku; a hodnota ve sloupci nebyla platným literálem vázaného typu C.

Při vrácení vstupního/výstupního nebo výstupního parametru byl typ SQL přesný nebo přibližný číselný typ, datum a čas nebo datový typ intervalu; typ C byl SQL_C_CHAR; a hodnota ve sloupci nebyla platným literálem vázaného typu SQL.
22019 Neplatný řídicí znak Připravený příkaz spojený s StatementHandle obsahoval predikát LIKE s ESCAPE v klauzuli WHERE a délka znaku escape po ESCAPE nebyla rovna 1.
22025 Neplatná řídicí sekvence Připravený příkaz spojený s StatementHandle obsahoval "LIKEpattern valueESCAPEcharacter" v klauzuli WHERE a znak následující za escape znakem v hodnotě vzoru nebyl znakem "%" nebo "_".
23000 Porušení omezení integrity Připravené prohlášení spojené s StatementHandle obsahovalo parametr. Hodnota parametru byla null pro sloupec definovaný jako NOT NULL v přidruženém sloupci tabulky, duplicitní hodnota byla zadána pro sloupec omezený tak, aby obsahoval pouze jedinečné hodnoty, nebo došlo k porušení některého jiného omezení integrity.
24000 Neplatný stav kurzoru Kurzor byl umístěn na StatementHandlesqlFetch nebo SQLFetchScroll. Tato chyba je vrácena Správcem ovladačů, pokud SQLFetch nebo SQLFetchScroll nevrátil SQL_NO_DATA a ovladač je vrácen, pokud SQLFetch nebo SQLFetchScroll vrátil SQL_NO_DATA.

Na Příkazovém úseku byl otevřený kurzor.

Připravený příkaz spojený s StatementHandle obsahoval umístěný příkaz update nebo delete a kurzor byl umístěn před začátkem výsledné sady nebo za jejím koncem.
40001 Selhání serializace Transakce byla vrácena zpět kvůli vzájemnému zablokování prostředku s jinou transakcí.
40003 Neznámé dokončování příkazů Přidružené připojení se nezdařilo během provádění této funkce a stav transakce nelze určit.
42000 Chyba syntaxe nebo porušení přístupu Uživatel neměl oprávnění spustit připravený příkaz spojený s StatementHandle.
44000 PORUŠENÍ FUNKCE CHECK OPTION Připravený příkaz spojený s StatementHandle obsahoval příkaz provedený INSERT na zobrazené tabulce nebo tabulku odvozenou z této tabulky, která byla vytvořena zadáním S CHECK-OPTION, takže jeden nebo více řádků ovlivněných tímto příkazem INSERT již nebude v zobrazené tabulce přítomno.

Připravený příkaz spojený s StatementHandle obsahoval příkaz provedený UPDATE na zobrazené tabulce nebo tabulku odvozenou z této tabulky, která byla vytvořena zadáním S CHECK-OPTION, takže jeden nebo více řádků ovlivněných tímto příkazem UPDATE již nebude v zobrazené tabulce přítomno.
HY000 Obecná chyba Došlo k chybě, pro kterou nebyla definována žádná specifická funkce SQLSTATE a pro kterou nebyla definována žádná implementace sqlSTATE. Chybová zpráva vrácená nástrojem SQLGetDiagRec v vyrovnávací paměti *MessageText popisuje chybu a její příčinu.
HY001 Chyba přidělení paměti Ovladač nemohl přidělit paměť potřebnou k podpoře provádění nebo dokončení funkce.
HY008 Operace byla zrušena. Asynchronní zpracování bylo povoleno pro StatementHandle. Funkce byla volána a před dokončením provádění byla volána funkce SQLCancel nebo SQLCancelHandle pro PříkazHandle. Pak byla funkce znovu volána v StatementHandle.

Funkce byla volána a před dokončením provádění byla volána funkce SQLCancel neboSQLCancelHandlez jiného vlákna v aplikaci s více vlákny.
HY010 Chyba posloupnosti funkcí (DM) Byla volána asynchronně spuštěná funkce pro popisovač připojení, který je přidružen k StatementHandle. Tato asynchronní funkce se stále spouštěla, když byla volána funkce SQLExecute .

(DM) SQLExecute, SQLExecDirect nebo SQLMoreResults byl volána pro StatementHandle a vrácena SQL_PARAM_DATA_AVAILABLE. Tato funkce byla volána před načtením dat pro všechny streamované parametry.

(DM) Pro PříkazHandle byla volána asynchronně spuštěná funkce (ne tato) a při zavolání této funkce se stále spouštěla.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations nebo SQLSetPos byly volány pro StatementHandle a vráceny SQL_NEED_DATA. Tato funkce byla volána před odesláním dat pro všechny parametry provádění dat nebo sloupce.

(DM) StatementHandle nebyl připraven.
HY013 Chyba správy paměti Volání funkce nelze zpracovat, protože základní objekty paměti nelze získat přístup, pravděpodobně kvůli nedostatku paměti.
HY090 Neplatná délka řetězce nebo vyrovnávací paměti Hodnota parametru nastavená pomocí sqlBindParameter byla nulovým ukazatelem a hodnota délky parametru nebyla 0, SQL_NULL_DATA, SQL_DATA_AT_EXEC, SQL_DEFAULT_PARAM nebo menší než nebo rovna SQL_LEN_DATA_AT_EXEC_OFFSET.

Hodnota parametru nastavená pomocí SQLBindParameter nebyla nulovým ukazatelem; datový typ C byl SQL_C_BINARY nebo SQL_C_CHAR; a hodnota délky parametru byla menší než 0, ale nebyla SQL_NTS, SQL_NULL_DATA, SQL_DEFAULT_PARAM, SQL_DATA_AT_EXEC, ani menší či rovna SQL_LEN_DATA_AT_EXEC_OFFSET.

Hodnota délky parametru vázaná sqlBindParameter byla nastavena na SQL_DATA_AT_EXEC; Typ SQL byl buď SQL_LONGVARCHAR, SQL_LONGVARBINARY nebo dlouhý datový typ specifický pro zdroj dat; a typ SQL_NEED_LONG_DATA_LEN informací v SQLGetInfo byl "Y".
HY105 Neplatný typ parametru Hodnota zadaná pro argument InputOutputType v SQLBindParameter byla SQL_PARAM_OUTPUT a parametr byl vstupní parametr.
HY109 Neplatná pozice kurzoru Připravený příkaz byl umístěný příkaz update nebo delete a kurzor byl umístěn (pomocí SQLSetPos nebo SQLFetchScroll) na řádek, který byl smazán nebo nebyl načten.
HY117 Připojení je pozastaveno kvůli neznámému stavu transakce. Jsou povoleny pouze funkce pro odpojení a jen pro čtení. (DM) Další informace o pozastaveném stavu naleznete v tématu FUNKCE SQLEndTran.
HYC00 Nepovinná funkce není implementována. Ovladač ani zdroj dat nepodporuje kombinaci aktuálních nastavení atributů SQL_ATTR_CONCURRENCY a SQL_ATTR_CURSOR_TYPE příkazu.

Atribut příkazu SQL_ATTR_USE_BOOKMARKS byl nastaven na SQL_UB_VARIABLE a atribut příkazu SQL_ATTR_CURSOR_TYPE byl nastaven na typ kurzoru, pro který ovladač nepodporuje záložky.
HYT00 Vypršel časový limit. Platnost časového limitu dotazu vypršela, než zdroj dat vrátil sadu výsledků. Časový limit je nastavený prostřednictvím sqlSetStmtAttr SQL_ATTR_QUERY_TIMEOUT.
HYT01 Vypršel časový limit připojení Platnost časového limitu připojení vypršela, než zdroj dat odpověděl na žádost. Časový limit připojení je nastavený prostřednictvím sqlSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Ovladač tuto funkci nepodporuje. (DM) Ovladač přidružený k StatementHandle nepodporuje funkci.
IM017 Dotazování je zakázané v asynchronním režimu oznámení. Při každém použití modelu oznámení je dotazování zakázané.
IM018 K dokončení předchozí asynchronní operace na tomto popisovači nebyla volána funkce SQLCompleteAsync. Pokud předchozí volání funkce na popisovači vrátí SQL_STILL_EXECUTING a pokud je povolen režim oznámení, musí být sqlCompleteAsync volán na popisovači, aby bylo možné provést následné zpracování a dokončit operaci.

SQLExecute může vrátit jakýkoli SQLSTATE požadovaný SQL , který může SQLPreprepare vrátit, na základě toho, kdy zdroj dat vyhodnotí SQL příkaz spojený s daným příkazem.

Comments

SQLExecute vykonává příkaz připravený SQLPrepare. Po zpracování nebo zahození výsledků volání do SQLExecute aplikací může aplikace znovu volat SQLExecute s novými hodnotami parametrů. Pro více informací o připravené realizaci viz Připravená realizace.

Pro více než jednou, musí aplikace před opětovným vykonáním příkazu SELECT zavolat SQLCloseCursor.

Pokud je datový zdroj v režimu manuálního potvrzení (vyžaduje explicitní zahájení transakce) a transakce ještě nebyla zahájena, ovladač iniciuje transakci dříve, než odešle SQL příkaz. Další informace naleznete v tématu Transakce.

Pokud aplikace používá SQLPrepare k přípravě a SQLExecute k odeslání příkazu COMMIT nebo ROLLBACK , nebude interoperabilní mezi produkty DBMS. Chcete-li potvrdit nebo vrátit transakce zpět, zavolejte SQLEndTran.

Pokud SQLExecute narazí na parametr data při vykonání, vrátí SQL_NEED_DATA. Aplikace odesílá data pomocí SQLParamData a SQLPutData. Viz SQLBindParameter, SQLParamData, SQLPutData a Odesílání dlouhých dat.

Pokud SQLExecute vykoná vyhledávaný příkaz update, insert nebo delete, který neovlivní žádné řádky ve zdroji dat, volání SQLExecute vrátí SQL_NO_DATA.

Pokud je hodnota atributu SQL_ATTR_PARAMSET_SIZE příkazu větší než 1 a SQL příkaz obsahuje alespoň jeden parametrový marker, SQLExecute vykoná SQL příkaz jednou pro každou sadu parametrů v polích, na která odkazuje argument *ParameterValuePtr ve voláních SQLBindParameter. Další informace naleznete v tématu Pole hodnot parametrů.

Pokud jsou záložky povoleny a je vykonán dotaz, který záložky nepodporuje, měl by ovladač zkusit prostředí přimět k tomu, aby podporovalo záložky, změnou hodnoty atributu a vrácením SQLSTATE 01S02 (změna hodnoty volitelné). Pokud atribut nelze změnit, ovladač by měl vrátit SQLSTATE HY024 (Neplatná hodnota atributu).

Note

Při použití poolování spojení aplikace nesmí provádět SQL příkazy, které mění databázi nebo kontext databáze, například příkaz USEdatabase v SQL Server, který mění katalog používaný datovým zdrojem.

Příklad kódu

Viz SQLBindParameter, SQLBulkOperations, SQLPutData a SQLSetPos.

Informace o Podívejte se
Vytvoření vazby vyrovnávací paměti ke sloupci v sadě výsledků SQLBindCol – funkce
Zrušení zpracování příkazů SQLCancel – funkce
Zavření kurzoru Funkce SQLCloseCursor
Provedení operace potvrzení nebo vrácení zpět FUNKCE SQLEndTran
Provádění SQL příkazu SQLExecDirect Function
Načítání více řádků dat Funkce SQLFetch
Načtení bloku dat nebo procházení sady výsledků SQLFetchScroll – funkce
Uvolnění rukojeti příkazu FUNKCE SQLFreeStmt
Vrácení názvu kurzoru FUNKCE SQLGetCursorName
Načtení části nebo celého sloupce dat Funkce SQLGetData
Vrácení dalšího parametru pro odesílání dat pro SQLParamData – funkce
Příprava příkazu pro spuštění Funkce SQLPrepare
Odesílání dat parametrů v době provádění FUNKCE SQLPutData
Nastavení názvu kurzoru FUNKCE SQLSetCursorName
Nastavení atributu příkazu FUNKCE SQLSetStmtAttr

Viz také

Referenční rozhraní ODBC API
Soubory hlaviček ODBC