Funkce SQLGetStmtAttr

Soulad
Představená verze: ODBC 3.0 Shoda s normami: ISO 92

Summary
SQLGetStmtAttr vrací aktuální nastavení atributu příkazu.

Note

Pro více informací o tom, na co Driver Manager mapuje tuto funkci při ODBC 3. x aplikace pracuje s ODBC 2. x ovladač, viz Funkce nahrazování mapování pro zpětnou kompatibilitu aplikací.

Syntax

  
SQLRETURN SQLGetStmtAttr(  
     SQLHSTMT        StatementHandle,  
     SQLINTEGER      Attribute,  
     SQLPOINTER      ValuePtr,  
     SQLINTEGER      BufferLength,  
     SQLINTEGER *    StringLengthPtr);  

Arguments

StatementHandle
[Vstup] Popisovač příkazu

Atribut
[Vstup] Atribut pro získání atributu.

ValuePtr
[Výstup] Ukazatel na buffer, do kterého se vrátí hodnota atributu specifikovaného v Attribute.

Pokud je ValuePtr NULL, StringLengthPtr stále vrátí celkový počet bajtů (bez znaku null-termination pro znaková data), které lze vrátit v bufferu na který ukazuje ValuePtr.

BufferLength
[Vstup] Pokud je Attribute atribut definovaný ODBC a ValuePtr ukazuje na znakový řetězec nebo binární buffer, měl by být tento argument délka *ValuePtr. Pokud je Attribute atribut definovaný ODBC a *ValuePtr je celé číslo, BufferLength se ignoruje. Pokud je hodnota vrácená v *ValuePtr Unicode řetězec (při volání SQLGetStmtAttrW), argument BufferLength musí být sudé číslo.

Pokud je Attribute atribut definovaný ovladačem, aplikace indikuje povahu atributu Driver Manageru nastavením argumentu BufferLength . BufferLength může mít následující hodnoty:

  • Pokud je *ValuePtr ukazatelem na znakový řetězec, pak BufferLength je délka řetězce nebo SQL_NTS.

  • Pokud je *ValuePtr ukazatelem na binární buffer, aplikace umístí výsledek makra SQL_LEN_BINARY_ATTR(length) do BufferLength. To umístí zápornou hodnotu v BufferLength.

  • Pokud je *ValuePtr ukazatelem na hodnotu jinou než znakový řetězec nebo binární řetězec, pak by BufferLength měl mít hodnotu SQL_IS_POINTER.

  • Pokud *ValuePtr obsahuje datový typ s pevnou délkou, pak je BufferLength buď SQL_IS_INTEGER, nebo SQL_IS_UINTEGER, podle potřeby.

StringLengthPtr
[Výstup] Ukazatel na buffer, do kterého lze vrátit celkový počet bajtů (bez znaku nulového ukončení), které lze vrátit v *ValuePtr. Pokud je hodnota atributu znakový řetězec a počet bajtů dostupných k vrácení je větší nebo roven BufferLength, data v *ValuePtr jsou zkrácena na BufferLength minus délka znaku null-termination a jsou null-terminována ovladačem.

Returns

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR nebo SQL_INVALID_HANDLE.

Diagnostika

Když SQLGetStmtAttr vrací SQL_ERROR nebo SQL_SUCCESS_WITH_INFO, lze získat přidruženou hodnotu SQLSTATE voláním SQLGetDiagRec s HandleType SQL_HANDLE_STMT a Handle of CommandHandle. Následující tabulka uvádí hodnoty SQLSTATE, které SQLGetStmtAttr 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 Data vrácená v *ValuePtr byla zkrácena na BufferLength minus délka znaku null-terminingu. Délka hodnoty nezkráceného řetězce se vrací v *StringLengthPtr. (Funkce vrátí SQL_SUCCESS_WITH_INFO.)
24000 Neplatný stav kurzoru Argument Attribute byl SQL_ATTR_ROW_NUMBER a kurzor nebyl otevřený, nebo kurzor byl umístěn před začátkem výsledné množiny či za koncem výsledné množiny.
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á SQLGetDiagRec v argumentu 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.
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 byla stále v běžném provozu, když byla volána funkce SQLGetStmtAttr .

(DM) Byla volána asynchronně vykonávající funkce pro CommandHandle a stále se spouštěla, když byla tato funkce vyvolána.

(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.
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) *ValuePtr je znakový řetězec a BufferLength byla menší než nula, ale ne SQL_NTS.
HY092 Neplatný identifikátor atributu/opce Hodnota určená pro argument Attribute nebyla platná pro verzi ODBC podporovanou ovladačem.
HY109 Neplatná pozice kurzoru Argument Attribute byl SQL_ATTR_ROW_NUMBER a řádek byl smazán nebo nebylo možné jej načítat.
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. Hodnota určená pro argument Attribute byla platným atributem příkazu ODBC pro verzi ODBC podporovanou ovladačem, ale nebyla podporována samotným ovladačem.
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č odpovídající StatementHandle tuto funkci nepodporuje.

Comments

Pro obecné informace o atributech příkazů viz Atributy příkazů.

Volání SQLGetStmtAttr vrací v *ValuePtr hodnotu atributu příkazu specifikovaného v Attribute. Tato hodnota může být buď SQLULEN hodnotou, nebo znakový řetězec ukončený null. Pokud je hodnota SQLULEN, některé ovladače mohou zapsat pouze dolní 32bitový nebo 16bitový buffer a vyšší bit zůstat beze změny. Proto by aplikace měly použít buffer SQLULEN a inicializovat hodnotu na 0 před vyvoláním této funkce. Také nejsou použity argumenty BufferLength a StringLengthPtr . Pokud je hodnota řetězec ukončený null, aplikace specifikuje maximální délku tohoto řetězce v argumentu BufferLength a ovladač vrací délku tohoto řetězce v bufferu *StringLengthPtr .

Aby aplikace volající SQLGetStmtAttr mohly pracovat s ODBC 2. x ovladačů, volání SQLGetStmtAttr je v Driver Manageru mapováno na SQLGetStmtOption.

Následující atributy příkazů jsou pouze pro čtení, takže je lze získat pomocí SQLGetStmtAttr, ale nelze je nastavit pomocí SQLSetStmtAttr:

  • SQL_ATTR_IMP_PARAM_DESC

  • SQL_ATTR_IMP_ROW_DESC

  • SQL_ATTR_ROW_NUMBER

Pro seznam atributů, které lze nastavit a získat, viz SQLSetStmtAttr.

Informace o Podívejte se
Vrácení nastavení atributu připojení FUNKCE SQLGetConnectAttr
Nastavení atributu spojení SQLSetConnectAttr – funkce
Nastavení atributu příkazu FUNKCE SQLSetStmtAttr