Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
uyumluluk
Sunulan Sürüm: ODBC 3.0 Standartları Uyumluluğu: ISO 92
Özeti
SQLFreeHandle belirli bir ortam, bağlantı, deyim veya tanımlayıcı tanıtıcı ile ilişkili kaynakları serbestleştirir.
Not
Bu işlev, tanıtıcıları boşaltmaya yönelik genel bir işlevdir. SQLFreeConnect
Sözdizimi
SQLRETURN SQLFreeHandle(
SQLSMALLINT HandleType,
SQLHANDLE Handle);
Bağımsız değişken
HandleType
[Giriş] SQLFreeHandletarafından serbestlenecek tanıtıcı türü. Aşağıdaki değerlerden biri olmalıdır:
SQL_HANDLE_DBC
SQL_HANDLE_DBC_INFO_TOKEN
SQL_HANDLE_DESC
SQL_HANDLE_ENV
SQL_HANDLE_STMT
SQL_HANDLE_DBC_INFO_TOKEN tutamacı yalnızca Sürücü Yöneticisi ve sürücüsü tarafından kullanılır. Uygulamalar bu tanıtıcı türünü kullanmamalıdır. SQL_HANDLE_DBC_INFO_TOKEN hakkında daha fazla bilgi için bkz. ODBC Sürücüsünde Connection-Pool Farkındalığı Geliştirme.
HandleType bu değerlerden biri değilse SQLFreeHandle SQL_INVALID_HANDLE döndürür.
İşle
[Giriş] Serbestlenecek tanıtıcı.
Döndürür
SQL_SUCCESS, SQL_ERROR veya SQL_INVALID_HANDLE.
SQLFreeHandle SQL_ERROR döndürürse, tanıtıcı hala geçerlidir.
Tanılama
| SQLSTATE | Hata | Açıklama |
|---|---|---|
| HY000 | Genel hata | Belirli bir SQLSTATE olmayan ve uygulamaya özgü SQLSTATE tanımlanmayan bir hata oluştu. *MessageText arabelleğindeki SQLGetDiagRec tarafından döndürülen hata iletisi, hatayı ve nedenini açıklar. |
| HY001 | Bellek ayırma hatası | Sürücü, işlevin yürütülmesini veya tamamlanmasını desteklemek için gereken belleği ayıramadı. |
| HY010 | İşlev dizisi hatası | (DM) HandleType bağımsız değişkeni SQL_HANDLE_ENV ve en az bir bağlantı ayrılmış veya bağlı durumdaydı. sqldisconnect ve (DM) (DM) HandleType bağımsız değişkeni SQL_HANDLE_DBC. Handle ile zaman uyumsuz olarak yürütülen bir işlev çağrıldı ve bu işlev çağrıldığında işlev yürütülüyordu. (DM) HandleType bağımsız değişkeni SQL_HANDLE_STMT. SQLExecute (DM) HandleType bağımsız değişkeni SQL_HANDLE_STMT. Zaman uyumsuz olarak yürütülen bir işlev, deyim tanıtıcısında veya ilişkili bağlantı tanıtıcısında çağrıldı ve bu işlev çağrıldığında işlev hala yürütülüyordu. (DM) HandleType bağımsız değişkeni SQL_HANDLE_DESC. İlişkili bağlantı tanıtıcısında zaman uyumsuz olarak yürütülen bir işlev çağrıldı; ve bu işlev çağrıldığında işlev hala yürütülüyordu. (DM) SQLFreeHandle (DM) SQLExecute, SQLExecDirectveya SQLMoreResults, Handle ile ilişkili deyim tanıtıcılarından biri için çağrıldı ve HandleType SQL_HANDLE_STMT veya döndürülen SQL_HANDLE_DESC SQL_PARAM_DATA_AVAILABLE olarak ayarlandı. Bu işlev, tüm akış parametreleri için veri alınmadan önce çağrıldı. |
| HY013 | Bellek yönetimi hatası | HandleType bağımsız değişkeni SQL_HANDLE_STMT veya SQL_HANDLE_DESC ve büyük olasılıkla yetersiz bellek koşulları nedeniyle temel alınan bellek nesnelerine erişilemediğinden işlev çağrısı işlenemedi. |
| HY017 | Otomatik olarak ayrılan tanımlayıcı tutamacının geçersiz kullanımı. | (DM) Tanıtıcı bağımsız değişkeni, otomatik olarak ayrılan bir tanımlayıcı için tanıtıcıya ayarlandı. |
| HY117 | Bilinmeyen işlem durumu nedeniyle bağlantı askıya alındı. Yalnızca bağlantıyı kesme ve salt okunur işlevlere izin verilir. | (DM) Askıya alma durumu hakkında daha fazla bilgi için bkz. SQLEndTran İşlevi. |
| HYT01 | Bağlantı zaman aşımı süresi doldu | Veri kaynağı isteği yanıtlamadan önce bağlantı zaman aşımı süresi doldu. Bağlantı zaman aşımı süresi SQLSetConnectAttrSQL_ATTR_CONNECTION_TIMEOUT üzerinden ayarlanır. |
| IM001 | Sürücü bu işlevi desteklemiyor | (DM) HandleType bağımsız değişkeni SQL_HANDLE_DESC ve sürücü bir ODBC 2*.x* sürücüsü idi. (DM) HandleType bağımsız değişkeni SQL_HANDLE_STMT ve sürücü geçerli bir ODBC sürücüsü değildi. |
Yorum
SQLFreeHandle, aşağıdaki bölümlerde açıklandığı gibi ortamlar, bağlantılar, deyimler ve tanımlayıcılar için tanıtıcıları serbest hale getirmek için kullanılır. Tanıtıcılar hakkında genel bilgi için bkz. Tanıtıcılar.
Uygulama serbest bırakılmış bir tanıtıcı kullanmamalıdır; Driver Manager, işlev çağrısındaki bir tanıtıcının geçerliliğini denetlemez.
Ortam Tanıtıcısını Serbest Tutma
SQL_HANDLE_ENV HandleTypeSQLFreeHandle çağırmadan önce, bir uygulamanın ortam altında ayrılan tüm bağlantılar için SQL_HANDLE_DBC HandleTypeSQLFreeHandle çağırması gerekir. Aksi takdirde, SQLFreeHandle
Ortam paylaşılan bir ortamsa, SQLFreeHandle çağıran uygulamanın SQL_HANDLE_ENV HandleType ile artık çağrıdan sonra ortama erişimi yoktur, ancak ortamın kaynakları serbest bırakılmaz. SQLFreeHandle çağrısı ortamın başvuru sayısını azaltmaya neden olur. Başvuru sayısı Sürücü Yöneticisi tarafından korunur. Sıfıra ulaşmazsa, paylaşılan ortam başka bir bileşen tarafından kullanılmaya devam ettiğinden serbest değildir. Başvuru sayısı sıfıra ulaşırsa, paylaşılan ortamın kaynakları serbesttir.
Bağlantı Tutamacını Serbest Tutma
SQL_HANDLE_DBC
Daha fazla bilgi için bkz. Bağlantı tanıtıcıları ve Veri Kaynağı veya Sürücü bağlantısı.
Deyim Tanıtıcısını Serbest Tutma
SQL_HANDLE_STMT
SQLDisconnect bağlantıda açık olan tüm deyimleri ve tanımlayıcıları otomatik olarak bırakır.
Tanımlayıcı Tutamacını Serbest Tutma
SQL_HANDLE_DESC
Not
ODBC 2*.x* sürücüleri, tanımlayıcı tanıtıcı tanıtıcıları ayırmayı desteklemedikleri gibi tanımlayıcı tanıtıcıların serbest bırakılmalarını desteklemez.
SQLDisconnect bağlantıda açık olan tüm deyimleri ve tanımlayıcıları otomatik olarak bırakır. Bir uygulama bir deyim tutamacını serbest oluşturduğunda, sürücü bu tanıtıcıyla ilişkili otomatik olarak oluşturulan tüm tanımlayıcıları serbesttir.
Tanımlayıcılar hakkında daha fazla bilgi için bkz. Tanımlayıcılar.
Kod Örneği
Ek kod örnekleri için bkz. SQLBrowseConnect
Kod
// 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;
}
}
İlgili İşlevler
| Hakkında bilgi için | Görmek |
|---|---|
| Tanıtıcı ayırma | SQLAllocHandle İşlevi |
| Deyim işlemeyi iptal etme | SQLCancel İşlevi |
| İmleç adı ayarlama | SQLSetCursorName İşlevi |
Ayrıca Bkz.
ODBC API Başvurusu
ODBC Üst Bilgi Dosyaları
Örnek ODBC Programı