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
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.
Související funkce
| Informace o | Podívejte se |
|---|---|
| Vrácení nastavení atributu připojení | FUNKCE SQLGetConnectAttr |
| Nastavení atributu spojení | SQLSetConnectAttr – funkce |
| Nastavení atributu příkazu | FUNKCE SQLSetStmtAttr |