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 3.0 Standardsefterlevnad: ISO 92
Summary
SQLGetStmtAttr returnerar den aktuella inställningen för ett statement-attribut.
Note
För mer information om vad Driver Manager mappar denna funktion till när en ODBC 3. x-applikationen fungerar med en ODBC 2. x-drivrutin , se Mappningsersättningsfunktioner för bakåtkompatibilitet av applikationer.
Syntax
SQLRETURN SQLGetStmtAttr(
SQLHSTMT StatementHandle,
SQLINTEGER Attribute,
SQLPOINTER ValuePtr,
SQLINTEGER BufferLength,
SQLINTEGER * StringLengthPtr);
Arguments
StatementHandle
[Indata] Instruktionshandtag.
Attribut
[Input] Attribut att hämta.
ValuePtr
[Utdata] Pekare till en buffert där värdet av attributet som anges i Attribut returneras för att returnera.
Om ValuePtr är NULL kommer StringLengthPtr ändå att returnera det totala antalet bytes (exklusive null-termineringstecknet för teckendata) som finns tillgängliga att returnera i bufferten som ValuePtr pekar på.
BufferLength
[Input] Om Attribute är ett ODBC-definierat attribut och ValuePtr pekar på en teckensträng eller en binär buffert, bör detta argument vara längden på *ValuePtr. Om Attribut är ett ODBC-definierat attribut och *ValuePtr är ett heltal, ignoreras BufferLength . Om värdet som returneras i *ValuePtr är en Unicode-sträng (vid anrop av SQLGetStmtAttrW), måste argumentet BufferLength vara ett jämnt tal.
Om Attribut är ett drivrutinsdefinierat attribut anger applikationen attributets natur till Driver Manager genom att sätta argumentet BufferLength . BufferLength kan ha följande värden:
Om *ValuePtr är en pekare till en teckensträng, så är BufferLength längden på strängen eller SQL_NTS.
Om *ValuePtr är en pekare till en binär buffert, placerar applikationen resultatet av makrot SQL_LEN_BINARY_ATTR(längd) i BufferLength. Detta placerar ett negativt värde i BufferLength.
Om *ValuePtr är en pekare till ett annat värde än en teckensträng eller binär sträng, så bör BufferLength ha värdet SQL_IS_POINTER.
Om *ValuePtr innehåller en datatyp med fast längd, är BufferLength antingen SQL_IS_INTEGER eller SQL_IS_UINTEGER, beroende på vad som är lämpligt.
StringLengthPtr
[Utdata] En pekare till en buffert där man kan returnera det totala antalet byte (exklusive null-termineringstecknet) som finns tillgängligt att returnera i *ValuePtr. Om attributvärdet är en teckensträng, och antalet bytes som kan returneras är större än eller lika med BufferLength, förkortas datan i *ValuePtr till BufferLength minus längden på ett nulltermineringstecken och nulltermineras av drivrutinen.
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR eller SQL_INVALID_HANDLE.
Diagnostics
När SQLGetStmtAttr returnerar SQL_ERROR eller SQL_SUCCESS_WITH_INFO kan ett associerat SQLSTATE-värde erhållas genom att anropa SQLGetDiagRec med HandleType av SQL_HANDLE_STMT och ett Handle av StatementHandle. Följande tabell listar de SQLSTATE-värden som vanligtvis returneras av SQLGetStmtAttr 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 | Datan som returnerades i *ValuePtr förkortades till BufferLength minus längden på ett null-termineringstecken. Längden på det otrunkerade strängvärdet returneras i *StringLengthPtr. (Funktionen returnerar SQL_SUCCESS_WITH_INFO.) |
| 24000 | Ogiltigt markörtillstånd | Argumentattributet var SQL_ATTR_ROW_NUMBER och markören var inte öppen, eller så var markören placerad före starten av resultatuppsättningen eller efter slutet av resultatuppsättningen. |
| 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 returneras av SQLGetDiagRec i argumentet MessageText 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. |
| HY010 | Funktionssekvensfel | (DM) En asynkront körande funktion anropades för anslutningshandtaget som är associerat med StatementHandle. Denna asynkrona funktion kördes fortfarande när SQLGetStmtAttr-funktionen anropades. (DM) En asynkront exekverande funktion anropades för StatementHandle och kördes fortfarande när denna funktion anropades. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations eller SQLSetPos anropades för StatementHandle och returnerades SQL_NEED_DATA. Den här funktionen anropades innan data skickades för alla data-at-execution-parametrar eller kolumner. |
| 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) *ValuePtr är en teckensträng, och BufferLength var mindre än noll, men inte lika med SQL_NTS. |
| HY092 | Ogiltig attribut-/optionsidentifierare | Värdet som specificerades för argumentattributet var inte giltigt för den version av ODBC som stöddes av drivrutinen. |
| HY109 | Ogiltig markörposition | Attributargumentet var SQL_ATTR_ROW_NUMBER och raden hade tagits bort eller kunde inte hämtas. |
| 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. |
| HYC00 | Valfri funktion har inte implementerats | Värdet som specificerades för argumentattributet Attribut var ett giltigt ODBC-satsattribut för den version av ODBC som stöddes av drivrutinen, men stöddes inte av drivrutinen. |
| 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 motsvarar StatementHandle stöder inte funktionen. |
Comments
För allmän information om uttalandeattribut, se Uttalandeattribut.
Ett anrop till SQLGetStmtAttr returnerar i *ValuePtr värdet av satsattributet som anges i Attribute. Det värdet kan vara antingen ett SQLULEN-värde eller en nullterminerad teckensträng. Om värdet är ett SQLULEN-värde kan vissa drivrutiner endast skriva de lägre 32- eller 16-bitarna i en buffert och låta den högre ordningens biten vara oförändrad. Därför bör applikationer använda en buffert av SQLULEN och initialisera värdet till 0 innan funktionen anropas. Dessutom används inte argumenten BufferLength och StringLengthPtr . Om värdet är en nullterminerad sträng specificerar applikationen den maximala längden på den strängen i BufferLength-argumentet , och drivrutinen returnerar längden på den strängen i *StringLengthPtr-bufferten .
För att tillåta applikationer som anropar SQLGetStmtAttr att fungera med ODBC 2. x-drivrutiner , ett anrop till SQLGetStmtAttr mappas i Driver Manager till SQLGetStmtOption.
Följande satsattribut är skrivskyddade, så de kan hämtas av SQLGetStmtAttr, men inte sättas av SQLSetStmtAttr:
SQL_ATTR_IMP_PARAM_DESC
SQL_ATTR_IMP_ROW_DESC
SQL_ATTR_ROW_NUMBER
För en lista över attribut som kan sättas och hämtas, se SQLSetStmtAttr.
Relaterade funktioner
| Mer information om | Se |
|---|---|
| Returnera inställningen för ett anslutningsattribut | SQLGetConnectAttr-funktion |
| Att sätta ett anslutningsattribut | SQLSetConnectAttr-funktion |
| Ange ett instruktionsattribut | SQLSetStmtAttr-funktion |