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ég
Bevezetett verzió: ODBC 1.0 szabványmegfelelőség: ISO 92
Summary
Az SQLFreeStmt leállítja egy adott utasításhoz kapcsolódó feldolgozást, lezárja az adott utasításhoz kapcsolódó összes nyitott kurzort, eldobja a függő eredményeket, vagy opcionálisan felszabadítja az utasítás kezelőhöz kapcsolódó összes erőforrást.
Syntax
SQLRETURN SQLFreeStmt(
SQLHSTMT StatementHandle,
SQLUSMALLINT Option);
Arguments
StatementHandle
[Bemenet] Utasítás fogantyul
Option
[Bemenet] Az alábbi lehetőségek egyike:
SQL_ ZÁRÁS: Lezárja a StatementHandle kurzort (ha definiált van), és eldobja az összes függő eredményt. Az alkalmazás később újra megnyithatja ezt a kurzort, ha ugyanazokkal vagy eltérő paraméterértékekkel újra SELECT utasítást futtat. Ha nincs nyitva kurzor, ez az opció nem hatol az alkalmazásra. Az SQLCloseCursort is hívható, hogy lezárja a kurzort. További információért lásd: A kurzor lezárása.
SQL_DROP: Ez az opció elavult. Az SQLFreeStmt-re SQL_DROP opcióval rendelkező hívás a Driver Managerben az SQLFreeHandle rendelője lesz.
SQL_UNBIND: Az ARD SQL_DESC_COUNT mezőjét 0-ra állítja, felszabadítva az adott StatementHandle SQLBindCol által korlátozott oszloppuffereket. Ez nem bontja fel a könyvjelzőoszlopot; ehhez az ARD könyvjelzőoszlopának SQL_DESC_DATA_PTR mezője NULL-ra van állítva. Figyeljük meg, hogy ha ezt a műveletet egy explicit módon kijelölt leírón végzik, amelyet több állítás oszt meg, akkor az összes olyan utasítás kötését fogja befolyásolni, amelyek megosztják a leírót. További információért lásd: Eredmények lekérésének áttekintése (Alap) oldalra.
SQL_RESET_PARAMS: Az APD SQL_DESC_COUNT mezőjét 0-ra állítja, felszabadítva az összes SQLBindParameter által beállított paraméterpuffert a megadott StatementHandle számára. Ha ezt a műveletet egy explicit módon kijelölt leírón végzik, amelyet több állítás oszt meg, ez a művelet befolyásolja az összes olyan utasítás kötését, amelyek megosztják a deskriptort. További információért lásd: Kötési paraméterek.
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR vagy SQL_INVALID_HANDLE.
Diagnostics
Amikor a SQLFreeStmt SQL_ERROR vagy SQL_SUCCESS_WITH_INFO értéket ad vissza, egy hozzárendelt SQLSTATE érték megkapható SQLGetDiagRec hívásával, amely egy SQL_HANDLE_STMT HandleType és egy HandleType of StatementHandle (Handle) segítségével érhető el. Az alábbi táblázat felsorolja az SQLFreeStmt által általában visszaadott SQLSTATE értékeket, és mindegyiket a függvény kontextusában magyarázza; a "(DM)" jelölés megelőzi a Driver Manager által visszaadott SQLSTATE-leírásokat. 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 | Description |
|---|---|---|
| 01000 | Általános figyelmeztetés | Illesztőprogram-specifikus tájékoztató üzenet. (A függvény SQL_SUCCESS_WITH_INFO ad vissza.) |
| 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 StatementHandle-hez társított kapcsolati leíróhoz aszinkron módon végrehajtó függvény lett meghívva. Ez az aszinkron függvény még akkor futott, amikor az SQLFreeStmt-t hívták. (DM) SQLExecute, SQLExecDirect vagy SQLMoreResults lett meghívva az Utasításkezelőhöz , és SQL_PARAM_DATA_AVAILABLE ad vissza. Ezt a függvényt az Option beállítással SQL_RESET_PARAMS-re hívták, mielőtt az összes streamelt paraméterre leérkezett volna az adatok. (DM) Egy aszinkron futó függvényt hívtak a StatementHandle számára, és még akkor futott, amikor ezt a függvényt hívták. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations vagy SQLSetPos lett meghívva az Utasításkezelőhöz , és SQL_NEED_DATA. Ezt a függvényt az összes adatvégrehajtási paraméter vagy oszlop adatküldése előtt hívták meg. |
| HY013 | Memóriakezelési hiba | A függvényhívás nem dolgozható fel, mert a mögöttes memóriaobjektumok nem érhetők el, esetleg a memóriahiány miatt. |
| HY092 | Opció típus a hatótávolságon kívül | (DM) Az érvelés Option értéke nem a következők volt: SQL_CLOSE SQL_DROP SQL_UNBIND SQL_RESET_PARAMS |
| HYT01 | A kapcsolati időkorlát 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 az SQLSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT keresztül van beállítva. |
| IM001 | Az illesztőprogram nem támogatja ezt a függvényt | (DM) Az StatementHandle-hez társított illesztőprogram nem támogatja a függvényt. |
Comments
Az SQLFreeStmt hívása a SQL_CLOSE opcióval egyenértékű az SQLCloseCursor hívásával, kivéve, hogy SQLFreeStmt SQL_CLOSE-vel nem érinti az alkalmazást, ha nincs kurzor nyitva az állításon. Ha nincs nyitva kurzor, az SQLCloseCursor-hoz hívás SQLSTATE 24000 (Invalid cursor state) függvényt ad.
Egy alkalmazás nem használhat utasításkezelőt a szabadulás után; a Driver Manager nem ellenőrzi a handle érvényességét egy függvényhívásban.
Example
Jó programozási gyakorlat a handle-ek szabad megszabadítására. Azonban az egyszerűség érdekében a következő minta nem tartalmaz olyan kódot, amely felszabadítja a kijelölt fogantyúkat. A fogantyúk szabadításának példáját lásd: SQLFreeHandle Function.
// SQLFreeStmt.cpp
// compile with: user32.lib odbc32.lib
#include <windows.h>
#include <sqlext.h>
int main() {
// declare and initialize the environment, connection, statement handles
SQLHENV henv = NULL; // Environment
SQLHDBC hdbc = NULL; // Connection handle
SQLHSTMT hstmt = NULL; // Statement handle
SQLRETURN retCode;
HWND desktopHandle = GetDesktopWindow(); // desktop's window handle
SQLCHAR connStrbuffer[1024];
SQLSMALLINT connStrBufferLen;
retCode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
retCode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, -1);
retCode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
retCode = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)10, 0);
retCode = SQLDriverConnect(hdbc, desktopHandle, (SQLCHAR *)"Driver={SQL Server}", SQL_NTS, connStrbuffer, 1024 + 1, &connStrBufferLen, SQL_DRIVER_PROMPT);
retCode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
retCode = SQLFreeStmt(hstmt, SQL_CLOSE);
retCode = SQLFreeStmt(hstmt, SQL_UNBIND);
retCode = SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
}
Kapcsolódó funkciók
| Információ erről: | Nézze |
|---|---|
| Kiosztás egy fogantyú | SQLAllocHandle függvény |
| Utasításfeldolgozás megszakítása | SQLCancel függvény |
| Kurzor zárása | SQLCloseCursor Function |
| Egy fogantyú felszabadítása | SQLFreeHandle függvény |
| Kurzornév beállítása | SQLSetCursorName függvény |