SQLFreeStmt függvény

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);  
}  
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