Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
megfelelőségi
Bevezetett verzió: ODBC 3.0 szabványmegfelelőség: ISO 92
összefoglaló
SQLFreeHandle felszabadítja az adott környezethez, kapcsolathoz, utasításhoz vagy leíró leíróhoz társított erőforrásokat.
Jegyzet
Ez a függvény a fogópontok felszabadítására szolgáló általános függvény. Lecseréli az ODBC 2.0 függvényeket SQLFreeConnect (kapcsolati leíró felszabadítására) és SQLFreeEnv (a környezeti leírók felszabadítására).
SQLFreeConnect és SQLFreeEnv az ODBC 3*.x*-ban elavultak.
Szintaxis
SQLRETURN SQLFreeHandle(
SQLSMALLINT HandleType,
SQLHANDLE Handle);
Érvek
HandleType
[Bemenet] Az SQLFreeHandle
SQL_HANDLE_DBC
SQL_HANDLE_DBC_INFO_TOKEN
SQL_HANDLE_DESC
SQL_HANDLE_ENV
SQL_HANDLE_STMT
SQL_HANDLE_DBC_INFO_TOKEN leírót csak az illesztőprogram-kezelő és az illesztőprogram használja. Az alkalmazások nem használhatják ezt a leírótípust. A SQL_HANDLE_DBC_INFO_TOKEN további információkért lásd: Connection-Pool Tudatosság fejlesztése ODBC-illesztőben.
Ha HandleType nem tartozik ezek közé az értékek közé, SQLFreeHandle SQL_INVALID_HANDLE ad vissza.
kezelése
[Bemenet] A felszabadítandó fogópont.
Visszatér
SQL_SUCCESS, SQL_ERROR vagy SQL_INVALID_HANDLE.
Ha SQLFreeHandle SQL_ERROR ad vissza, a leíró továbbra is érvényes.
Diagnosztika
Ha SQLFreeHandle SQL_ERROR ad vissza, egy társított SQLSTATE-érték szerezhető be azon leíró diagnosztikai adatstruktúrájából, amelyet SQLFreeHandle megpróbált felszabadítani, de nem sikerült. Az alábbi táblázat felsorolja a SQLFreeHandle által visszaadott SQLSTATE-értékeket, és ismerteti azokat a függvény kontextusában; a(z) "(DM)" jelölés megelőzi a Driver Manager által visszaadott SQLSTATES-ek leírását. Az egyes SQLSTATE-értékekhez társított visszatérési kód SQL_ERROR, kivéve, ha másként van feltüntetve.
| SQLSTATE | Hiba | Leírás |
|---|---|---|
| HY000 | Általános hiba | Hiba történt, amely miatt nem volt konkrét SQLSTATE, és amelyhez nem definiáltak implementációspecifikus SQLSTATE-t. Az SQLGetDiagRec által a *MessageText pufferben visszaadott hibaüzenet leírja a hibát és annak okát. |
| HY001 | Memóriafoglalási hiba | Az illesztőprogram nem tudta lefoglalni a függvény végrehajtásának vagy befejezésének támogatásához szükséges memóriát. |
| HY010 | Függvényütemezési hiba | (DM) A HandleType argumentum SQL_HANDLE_ENV volt, és legalább egy kapcsolat lefoglalt vagy csatlakoztatott állapotban volt.
SQLDisconnect és sqlFreeHandle SQL_HANDLE_DBC HandleType kell meghívni minden kapcsolathoz, mielőtt SQLFreeHandleHandleType SQL_HANDLE_ENV-val hívna meg. (DM) A HandleType argumentum SQL_HANDLE_DBC volt, és a függvény meghívása a SQLDisconnect meghívása előtt történt. (DM) A HandleType argumentum SQL_HANDLE_DBC volt. A függvény aszinkron módon történő végrehajtásának meghívása Handle használatával történt, és a függvény a függvény meghívásakor továbbra is végrehajtásra került. (DM) A HandleType argumentum SQL_HANDLE_STMT volt. SQLExecute, SQLExecDirect, SQLBulkOperationsvagy SQLSetPos meghívása az utasításkezelővel történt, és SQL_NEED_DATA adott vissza. Ezt a függvényt az összes adatvégrehajtási paraméter vagy oszlop adatküldése előtt hívták meg. (DM) A HandleType argumentum SQL_HANDLE_STMT volt. Egy aszinkron módon végrehajtó függvényt hívtak meg az utasításkezelőn vagy a társított kapcsolati leírón, és a függvény a függvény meghívásakor továbbra is végrehajtásra került. (DM) A HandleType argumentum SQL_HANDLE_DESC volt. A társított kapcsolati leírón aszinkron módon végrehajtó függvényt hívtak meg; és a függvény még mindig a függvény meghívásakor lett végrehajtva. (DM) Az SQLFreeHandle meghívása előtt nem adták ki az összes leányvállalati leírót és egyéb erőforrást. (DM) SQLExecute, SQLExecDirectvagy SQLMoreResults a Handle és HandleType SQL_HANDLE_STMT vagy SQL_HANDLE_DESC visszaadott SQL_PARAM_DATA_AVAILABLE egyik utasításleírójához lett meghívva. Ez a függvény az összes streamelt paraméter adatainak lekérése előtt lett meghívva. |
| HY013 | Memóriakezelési hiba | A HandleType argumentum SQL_HANDLE_STMT vagy SQL_HANDLE_DESC volt, és a függvényhívás nem dolgozható fel, mert az alapul szolgáló memóriaobjektumok nem érhetők el, valószínűleg a memóriahiány miatt. |
| HY017 | Érvénytelen az automatikusan lefoglalt leíró leíró leírójának használata. | (DM) A Leíró argumentum egy automatikusan lefoglalt leíró leírójának leírója lett beállítva. |
| HY117 | A kapcsolat ismeretlen tranzakciós állapot miatt fel van függesztve. Csak a leválasztási és írásvédett függvények engedélyezettek. | (DM) További információ a felfüggesztett állapotról: SQLEndTran függvény. |
| HYT01 | A kapcsolat időtúllépése lejárt | A kapcsolat időtúllépési időtartama lejárt, mielőtt az adatforrás válaszolt a kérésre. A kapcsolat időtúllépési időszaka SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT. |
| IM001 | Az illesztőprogram nem támogatja ezt a függvényt | (DM) A HandleType argumentum SQL_HANDLE_DESC volt, az illesztőprogram pedig ODBC 2*.x* illesztőprogram volt. (DM) A HandleType argumentum SQL_HANDLE_STMT volt, és az illesztőprogram nem volt érvényes ODBC-illesztő. |
Megjegyzések
SQLFreeHandle a következő szakaszokban ismertetett környezetek, kapcsolatok, utasítások és leírók leíróinak felszabadítására szolgál. A leírókkal kapcsolatos általános információkért lásd: Fogópontok.
Az alkalmazások nem használhatnak fogópontot a felszabadítás után; az Illesztőprogram-kezelő nem ellenőrzi a leíró érvényességét egy függvényhívásban.
Környezeti leíró felszabadítása
Mielőtt meghívja SQLFreeHandle SQL_HANDLE_ENV HandleType, az alkalmazásnak meg kell hívnia SQLFreeHandle egy HandleType SQL_HANDLE_DBC a környezetben lefoglalt összes kapcsolathoz. Ellenkező esetben az SQLFreeHandle
Ha a környezet megosztott környezet, a SQLFreeHandle SQL_HANDLE_ENV HandleType meghívó alkalmazás már nem fér hozzá a környezethez a hívás után, de a környezet erőforrásai nem feltétlenül szabadulnak fel. Az SQLFreeHandle hívása mérsékeli a környezet referenciaszámát. A referenciaszámot az illesztőprogram-kezelő tartja karban. Ha nem éri el a nullát, a megosztott környezet nem lesz felszabadítva, mert egy másik összetevő továbbra is használja. Ha a hivatkozási szám eléri a nullát, a megosztott környezet erőforrásai felszabadulnak.
Kapcsolati leíró felszabadítása
Mielőtt meghívja
További információ: Kapcsolatkezelők és Az adatforrás vagy az illesztőprogramleválasztása.
Utasításkezelő felszabadítása
Az SQLFreeHandle
Figyelje meg, hogy SQLDisconnect automatikusan elveti a kapcsolaton megnyitott utasításokat és leírókat.
Leírófogópont felszabadítása
Az SQLFreeHandle
Jegyzet
Az ODBC 2*.x* illesztőprogramok nem támogatják a leíró fogópontok felszabadítását, ahogyan a leíró fogópontok kiosztását sem.
Figyelje meg, hogy SQLDisconnect automatikusan elveti a kapcsolaton megnyitott utasításokat és leírókat. Amikor egy alkalmazás felszabadít egy utasításfogópontot, az illesztőprogram felszabadítja a leíróhoz társított összes automatikusan létrehozott leírót.
További információ a leírókról: Leírók.
Példa kódra
További kódmintákért lásd SQLBrowseConnect és SQLConnect.
Kód
// SQLFreeHandle.cpp
// compile with: user32.lib odbc32.lib
#include <windows.h>
#include <sqlext.h>
#include <stdio.h>
int main() {
SQLRETURN retCode;
HWND desktopHandle = GetDesktopWindow(); // desktop's window handle
SQLCHAR connStrbuffer[1024];
SQLSMALLINT connStrBufferLen;
// Initialize the environment, connection, statement handles.
SQLHENV henv = NULL; // Environment
SQLHDBC hdbc = NULL; // Connection handle
SQLHSTMT hstmt = NULL; // Statement handle
// Allocate the environment.
retCode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
// Set environment attributes.
retCode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, -1);
// Allocate the connection.
retCode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
// Set the login timeout.
retCode = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)10, 0);
// Let the user select the data source and connect to the database.
retCode = SQLDriverConnect(hdbc, desktopHandle, (SQLCHAR *)"Driver={SQL Server}", SQL_NTS, connStrbuffer, 1025, &connStrBufferLen, SQL_DRIVER_PROMPT);
retCode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
// Free handles, and disconnect.
if (hstmt) {
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
hstmt = NULL;
}
if (hdbc) {
SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
hdbc = NULL;
}
if (henv) {
SQLFreeHandle(SQL_HANDLE_ENV, henv);
henv = NULL;
}
}
Kapcsolódó függvények
| További információ: | Lát |
|---|---|
| Fogópont kiosztása | SQLAllocHandle függvény |
| Utasításfeldolgozás megszakítása | SQLCancel-függvény |
| Kurzornév beállítása | SQLSetCursorName függvény |
Lásd még:
ODBC API-referencia
ODBC-fejlécfájlok
ODBC-mintaprogram