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: ODBC 1.0 Soulad standardů: ODBC
Summary
SQLNativeSQL vrací SQL řetězec upravený ovladačem.
SQLNativeSQL nespouští SQL příkaz.
Syntax
SQLRETURN SQLNativeSql(
SQLHDBC ConnectionHandle,
SQLCHAR * InStatementText,
SQLINTEGER TextLength1,
SQLCHAR * OutStatementText,
SQLINTEGER BufferLength,
SQLINTEGER * TextLength2Ptr);
Arguments
ConnectionHandle
[Vstup] Popisovač připojení.
InStatementText
[Vstup] SQL textový řetězec bude přeložen.
TextLength1
[Vstup] Délka ve znacích textového řetězce *InStatementText .
OutStatementText
[Výstup] Ukazatel na buffer, do kterého se vrátí přeložený SQL řetězec.
Pokud je OutStatementText NULL, TextLength2Ptr stále vrátí celkový počet znaků (kromě znaku null-termination pro znaková data), které lze vrátit v bufferu na který ukazuje OutStatementText.
BufferLength
[Vstup] Počet znaků v bufferu *OutStatementText . Předchozí verze této dokumentace mylně naznačovaly, že tento počet znaků musí být i tehdy, pokud hodnota vrácená v *InStatementText je Unicode řetězec (při volání SQLNativeSqlW). Takové omezení neexistuje. Pro optimální interoperabilitu by autoři ovladačů měli očekávat, že jakýkoli počet znaků bude předán této funkci, zatímco správci aplikací se doporučuje vždy používat sudý počet.
TextLength2Ptr
[Výstup] Ukazatel na buffer, do kterého se vrátí celkový počet znaků (bez null-termination), které lze vrátit v *OutStatementText. Pokud je počet znaků dostupných k vrácení větší nebo roven BufferLength, překlad SQL řetězce v *OutStatementText je zkrácen na BufferLength minus délka znaku null-termination.
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR nebo SQL_INVALID_HANDLE.
Diagnostika
Když SQLNativeSQL vrací buď SQL_ERROR, nebo SQL_SUCCESS_WITH_INFO, lze získat přidruženou hodnotu SQLstate, pokud zavoláte SQLGetDiagRec s HandleType SQL_HANDLE_DBC a HandlemConnectionHandle. Následující tabulka uvádí hodnoty SQLSTATE, které SQLNativeSQL 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.) |
| 01004 | Řetězcová data, zkrácená vpravo | Buffer *OutStatementText nebyl dostatečně velký na vrácení celého SQL řetězce, takže SQL řetězec byl zkrácen. Délka nezkráceného SQL řetězce se vrací v *TextLength2Ptr. (Funkce vrátí SQL_SUCCESS_WITH_INFO.) |
| 08003 | Připojení není otevřené | ConnectionHandle nebyl ve stavu připojení. |
| 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. |
| 22007 | Neplatný formát data a času | * InStatementText obsahoval únikovou klauzuli s neplatným datem, časem nebo časovou hodnotou. |
| 24000 | Neplatný stav kurzoru | Kurzor zmíněný ve výroku byl umístěn před začátkem výsledné množiny nebo za koncem výsledné množiny. Tato chyba nemusí být vrácena ovladačem s nativní implementací kurzoru DBMS. |
| 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. |
| HY009 | Neplatné použití ukazatele null | (DM) *InStatementText byl nulový ukazatel. |
| HY010 | Chyba posloupnosti funkcí | (DM) Byla volána asynchronně vykonávající funkce pro ConnectionHandle a stále se spouštěla, když byla tato funkce vyvolána. |
| 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 | (DM) Argument TextLength1 byl menší než 0, ale ne SQL_NTS. |
| (DM) Argument BufferLength byl menší než 0 a argument OutStatementText nebyl nullovým ukazatelem. | ||
| HY109 | Neplatná pozice kurzoru | Aktuální řádek kurzoru byl smazán nebo nebyl načten. Tato chyba nemusí být vrácena ovladačem s nativní implementací kurzoru DBMS. |
| 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. |
| 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č spojený s ConnectionHandle tuto funkci nepodporuje. |
Comments
Následují příklady toho, co by SQLNativeSQL mohl vrátit pro následující vstupní SQL řetězec obsahující skalární funkci CONVERT. Předpokládejme, že sloupec empid je typu INTEGER ve zdroji dat:
SELECT { fn CONVERT (empid, SQL_SMALLINT) } FROM employee
Ovladač pro Microsoft SQL Server může vrátit následující přeložený SQL řetězec:
SELECT convert (smallint, empid) FROM employee
Ovladač pro ORACLE Server může vrátit následující přeložený SQL řetězec:
SELECT to_number (empid) FROM employee
Ovladač pro Ingres může vrátit následující přeložený SQL řetězec:
SELECT int2 (empid) FROM employee
Pro více informací viz Přímé provedení a Připravené provedení.
Související funkce
Žádné.