Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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.
Související funkce
| 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 |