SQLGetStmtAttr-funktion

Ö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.

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