Funkce „SQLGetConnectAttr“

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

Summary
SQLGetConnectAttr vrací aktuální nastavení atributu spojení.

Note

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

Syntax

  
SQLRETURN SQLGetConnectAttr(  
     SQLHDBC        ConnectionHandle,  
     SQLINTEGER     Attribute,  
     SQLPOINTER     ValuePtr,  
     SQLINTEGER     BufferLength,  
     SQLINTEGER *   StringLengthPtr);  

Arguments

ConnectionHandle
[Vstup] Popisovač připojení.

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

ValuePtr
[Výstup] Ukazatel na paměť, do kterého lze vrátit aktuální hodnotu atributu určeného pomocí atributu. U celočíselných atributů mohou některé ovladače zapsat pouze spodní 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.

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 v *ValuePtr Unicode řetězec (při volání SQLGetConnectAttrW), musí být argument BufferLength 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, BufferLength je délka řetězce.

  • 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, BufferLength by měl mít hodnotu SQL_IS_POINTER.

  • Pokud *ValuePtr obsahuje datový typ s pevnou délkou, BufferLength je 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 řetězec znaků a počet bajtů dostupných k vrácení je větší než BufferLength minus délka znaku null-terminace, 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_NO_DATA, SQL_ERROR nebo SQL_INVALID_HANDLE.

Diagnostika

Když SQLGetConnectAttr vrátí SQL_ERROR nebo SQL_SUCCESS_WITH_INFO, lze z diagnostické datové struktury získat přidruženou hodnotu SQLstate, zavolání SQLGetDiagRec pomocí HandleType SQL_HANDLE_DBC a HandleHandle. Následující tabulka uvádí hodnoty SQLSTATE, které obvykle vrací SQLGetConnectAttr , 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.)
08003 Připojení není otevřené (DM) Byla určena hodnota atributu , která vyžadovala otevřené spojení.
08S01 Selhání komunikačního propojení Komunikační propojení mezi ovladačem a zdrojem dat, ke kterému byl ovladač připojen, selhalo před dokončením zpracování funkce.
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á z diagnostické datové struktury argumentem MessageText v SQLGetDiagField popisuje chybu a její příčinu.
HY001 Chyba přidělení paměti Ovladač nemohl přidělit paměť, která je nutná k podpoře provádění nebo dokončování funkce.
HY010 Chyba posloupnosti funkcí (DM) SQLBrowseConnect byl vyvolán pro ConnectionHandle a vrátil SQL_NEED_DATA. Tato funkce byla vyvolána před tím, než SQLBrowseConnect vrátil SQL_SUCCESS_WITH_INFO nebo SQL_SUCCESS.

(DM) SQLExecute, SQLExecDirect nebo SQLMoreResults byl volán pro ConnectionHandle a vracel SQL_PARAM_DATA_AVAILABLE. Tato funkce byla volána před načtením dat pro všechny streamované parametry.
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 řetězec znaků 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.
HY114 Ovladač nepodporuje asynchronní provádění funkcí na úrovni spojení (DM) Aplikace se pokusila povolit asynchronní provádění funkcí s SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE pro ovladač, který nepodporuje asynchronní operace spojení.
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 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č, který odpovídá ConnectionHandle nepodporuje funkci.

Comments

Pro obecné informace o atributech spojení viz Atributy spojení.

Pro seznam atributů, které lze nastavit, viz SQLSetConnectAttr. Všimněte si, že pokud Attribute specifikuje atribut, který vrací řetězec, ValuePtr musí být ukazatelem na buffer pro tento řetězec. Maximální délka vráceného řetězce včetně znaku null-termination bude BufferLengths bajty.

V závislosti na atributu nemusí aplikace navazovat spojení před vyvoláním SQLGetConnectAttr. Pokud je však volán SQLGetConnectAttr a specifikovaný atribut nemá výchozí nastavení a nebyl nastaven předchozím voláním SQLSetConnectAttr, SQLGetConnectAttr SQL_NO_DATA vrátí.

Pokud je Attribute SQL_ATTR_ TRACE nebo SQL_ATTR_ TRACEFILE, ConnectionHandle nemusí být platný a SQLGetConnectAttr nevrátí SQL_ERROR ani SQL_INVALID_HANDLE, pokud je ConnectionHandle neplatný. Tyto vlastnosti platí pro všechna spojení. SQLGetConnectAttr vrátí SQL_ERROR nebo SQL_INVALID_HANDLE, pokud je jiný argument neplatný.

Ačkoli aplikace může nastavit atributy příkazů pomocí SQLSetConnectAttr, aplikace nemůže použít SQLGetConnectAttr k získání hodnot atributů příkazů; musí volat SQLGetStmtAttr , aby získal nastavení atributů příkazů.

Jak atributy SQL_ATTR_AUTO_IPD, tak SQL_ATTR_CONNECTION_DEAD připojení lze vrátit voláním do SQLGetConnectAttr , ale nelze je nastavit voláním SQLSetConnectAttr.

Note

Pro SQLGetConnectAttr neexistuje asynchronní podpora. Při implementaci SQLGetConnectAttr může ovladač zlepšit výkon tím, že minimalizuje počet odeslání nebo požadavků těchto informací ze serveru.

Informace o Podívejte se
Vrácení nastavení atributu příkazu FUNKCE SQLGetStmtAttr
Nastavení atributu spojení SQLSetConnectAttr – funkce
Nastavení atributu prostředí SQLSetEnvAttr Function
Nastavení atributu příkazu FUNKCE SQLSetStmtAttr