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: ODBC
Summary
SQLNativeSql returnerar SQL-strängen som modifieras av drivrutinen.
SQLNativeSql kör inte SQL-satsen .
Syntax
SQLRETURN SQLNativeSql(
SQLHDBC ConnectionHandle,
SQLCHAR * InStatementText,
SQLINTEGER TextLength1,
SQLCHAR * OutStatementText,
SQLINTEGER BufferLength,
SQLINTEGER * TextLength2Ptr);
Arguments
ConnectionHandle
Indata: Anslutningshandtag.
InStatementText
[Input] SQL-textsträng som ska översättas.
TextLength1
[Input] Längd i tecken i *InStatementText-textsträngen .
OutStatementText
[Utdata] Pekare till en buffert där den översatta SQL-strängen ska returneras.
Om OutStatementText är NULL kommer TextLength2Ptr ändå att returnera det totala antalet tecken (exklusive null-termineringstecknet för teckendata) som finns tillgängliga att returnera i bufferten som OutStatementText pekar på.
BufferLength
[Input] Antal tecken i *OutStatementText-bufferten . Tidigare versioner av denna dokumentation antydde felaktigt att detta teckenantal måste vara även om värdet som returneras i *InStatementText är en Unicode-sträng (när SQLNativeSqlW anropas). Det finns ingen sådan begränsning. För optimal interoperabilitet bör drivrutinsskrivare förvänta sig att varje antal tecken skickas till denna funktion, medan applikationsskrivare rekommenderas att alltid använda ett jämnt antal.
TextLength2Ptr
[Utdata] Pekare till en buffert där det totala antalet tecken (exklusive null-termination) kan returneras i *OutStatementText. Om antalet tecken som kan returneras är större än eller lika med BufferLength, förkortas den översatta SQL-strängen i *OutStatementText till BufferLength minus längden på ett null-termineringstecken.
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR eller SQL_INVALID_HANDLE.
Diagnostics
När SQLNativeSql returnerar antingen SQL_ERROR eller SQL_SUCCESS_WITH_INFO kan ett associerat SQLSTATE-värde erhållas genom att anropa SQLGetDiagRec med en HandleType av SQL_HANDLE_DBC och ett Handle av ConnectionHandle. Följande tabell listar de SQLSTATE-värden som vanligtvis returneras av SQLNativeSql 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.) |
| 01004 | Strängdata, höger trunkerade | Bufferten *OutStatementText var inte tillräckligt stor för att returnera hela SQL-strängen, så SQL-strängen förkortades. Längden på den otrunkerade SQL-strängen returneras i *TextLength2Ptr. (Funktionen returnerar SQL_SUCCESS_WITH_INFO.) |
| 08003 | Anslutningen är inte öppen | ConnectionHandle var inte i ett anslutet tillstånd. |
| 08S01 | Kommunikationslänkfel | Kommunikationslänken mellan drivrutinen och datakällan som drivrutinen var ansluten till misslyckades innan funktionen slutförde bearbetningen. |
| 22007 | Ogiltigt datetime-format | * InStatementText innehöll en flyktklausul med ett ogiltigt datum, tid eller tidsstämpelvärde. |
| 24000 | Ogiltigt markörtillstånd | Markören som avses i påståendet placerades före början av resultatmängden eller efter resultatmängdens slut. Detta fel får inte returneras av en drivrutin med en inbyggd DBMS-kursorimplementation. |
| 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 returnerades av SQLGetDiagRec i *MessageText-bufferten 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. |
| HY009 | Ogiltig användning av null-pekare | (DM) *InStatementText var en null-pekare. |
| HY010 | Funktionssekvensfel | (DM) En asynkront exekverande funktion anropades för ConnectionHandle och kördes fortfarande när denna funktion anropades. |
| HY013 | Minneshanteringsfel | Det gick inte att bearbeta funktionsanropet eftersom det inte gick att komma åt underliggande minnesobjekt, möjligen på grund av minnesbrist. |
| HY090 | Ogiltig sträng- eller buffertlängd | (DM) Argumentet TextLength1 var mindre än 0, men inte lika med SQL_NTS. |
| (DM) Argumentet BufferLength var mindre än 0 och argumentet OutStatementText var inte en nullpekare. | ||
| HY109 | Ogiltig markörposition | Den nuvarande raden av markören hade tagits bort eller hade inte hämtats. Detta fel får inte returneras av en drivrutin med en inbyggd DBMS-kursorimplementation. |
| 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 kopplad till ConnectionHandle stöder inte funktionen. |
Comments
Följande är exempel på vad SQLNativeSql kan returnera för följande indata-SQL-sträng som innehåller skalärfunktionen CONVERT. Antag att kolumn-empid är av typen INTEGER i datakällan:
SELECT { fn CONVERT (empid, SQL_SMALLINT) } FROM employee
En drivrutin för Microsoft SQL Server kan returnera följande översatta SQL-sträng:
SELECT convert (smallint, empid) FROM employee
En drivrutin för ORACLE Server kan returnera följande översatta SQL-sträng:
SELECT to_number (empid) FROM employee
En drivrutin för Ingres kan returnera följande översatta SQL-sträng:
SELECT int2 (empid) FROM employee
För mer information, se Direct Execution och Prepared Execution.
Relaterade funktioner
None.