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.
Uygunluk
Kullanıma Sunulan Sürüm: ODBC 1.0 Standartları Uyumluluğu: ISO 92
Summary
SQLFreeStmt, belirli bir ifadeyle ilişkili işlemeyi durdurur, ifadeyle ilişkili açık imleci kapatır, bekleyen sonuçları atar veya isteğe bağlı olarak ifade tutucusuna bağlı tüm kaynakları serbest bırakır.
Syntax
SQLRETURN SQLFreeStmt(
SQLHSTMT StatementHandle,
SQLUSMALLINT Option);
Arguments
StatementHandle
[Giriş] Özlem tutağı
Seçenek
[Giriş] Aşağıdaki seçeneklerden biri:
SQL_ KAPATMA: StatementHandle ile ilişkili imciyi kapatır (eğer tanımlanmışsa) ve bekleyen tüm sonuçları atar. Uygulama, aynı veya farklı parametre değerleriyle bir SELECT ifadesini tekrar çalıştırarak bu imleci daha sonra yeniden açabilir. Açık bir imleç yoksa, bu seçenek uygulama için hiçbir etkisi olmaz. SQLCloseCursor ayrıca bir imleci kapatmak için çağrılabilir. Daha fazla bilgi için Kapatma İmleci sayfasına bakınız.
SQL_DROP: Bu seçenek kullanımdan kaldırılmıştır. SQLFreeStmt'ye yapılan bir çağrı, Driver Manager içinde SQL_DROP seçeneğiyle SQLFreeHandle ile eşlenir.
SQL_UNBIND: ARD'nin SQL_DESC_COUNT alanını 0'a ayar, verilen StatementHandleiçin SQLBindCol ile sınırlanan tüm sütun tamponlarını serbest bırakır. Bu, yer imi sütununu çözmez; bunu yapmak için ARD'nin yer imi sütununun SQL_DESC_DATA_PTR alanı NULL olarak ayarlanır. Unutmayın ki, bu işlem, birden fazla ifadeyle paylaşılan açıkça tahsis edilmiş bir tanımlayıcıda yapılırsa, işlemin tanımlayıcıyı paylaşan tüm ifadelerin bağlarını etkileyeceği. Daha fazla bilgi için Sonuçların Geri Alınmasının Genel Görünümü (Temel) bölümüne bakınız.
SQL_RESET_PARAMS: APD'nin SQL_DESC_COUNT alanını 0'a ayar, verilen StatementHandleiçin SQLBindParameter tarafından belirlenen tüm parametre tamponlarını serbest bırakır. Bu işlem, birden fazla ifadeyle paylaşılan açıkça tahsis edilmiş bir tanımlayıcı üzerinde yapılırsa, tanımlayıcıyı paylaşan tüm ifadelerin bağlarını etkiler. Daha fazla bilgi için Bağlama Parametreleri'ne bakınız.
İadeler
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR veya SQL_INVALID_HANDLE.
Diagnostics
SQLFreeStmt SQL_ERROR veya SQL_SUCCESS_WITH_INFO döndürdüğünde, ilişkili bir SQLSTATE değeri alınabilir; bu değer SQLGetDiagRec ile SQL_HANDLE_STMT HandleType ve StatementHandle ile çağrılar. Aşağıdaki tablo, genellikle SQLFreeStmt tarafından duygulanan SQLSTATE değerlerini listeler; her birini bu fonksiyonun bağlamında açıklar; "(DM)" gösterimi, Sürücü Yöneticisi tarafından döndürülen SQLSTATE açıklamalarından önce gelir. Aksi belirtilmediği sürece, her SQLSTATE değeriyle ilişkili dönüş kodu SQL_ERROR.
| SQLSTATE | Error | Description |
|---|---|---|
| 01000 | Genel uyarı | Sürücüye özgü bilgilendirici ileti. (İşlev SQL_SUCCESS_WITH_INFO döndürür.) |
| HY000 | Genel hata | Belirli bir SQLSTATE olmayan ve uygulamaya özgü SQLSTATE tanımlanmayan bir hata oluştu. *MessageText arabelleğinde 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) StatementHandle ile ilişkili bağlantı tanıtıcısı için zaman uyumsuz olarak yürütülen bir işlev çağrıldı. Bu asenkron fonksiyon SQLFreeStmt çağrıldığında hâlâ çalışıyordu. (DM) SQLExecute, SQLExecDirect veya SQLMoreResults, StatementHandle için çağrıldı ve SQL_PARAM_DATA_AVAILABLE döndürdü. Bu fonksiyon, tüm akış parametreleri için veri alınmadan önce Option SQL_RESET_PARAMS olarak ayarlanarak çağrıldı. (DM) StatementHandle için asenkron olarak çalışan bir fonksiyon çağrıldı ve bu fonksiyon çağrıldığında hâlâ çalışıyordu. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations veya SQLSetPos, StatementHandle için çağrıldı ve SQL_NEED_DATA döndürdü. Bu işlev, tüm yürütme sırasında veri parametreleri veya sütunları için veri gönderilmeden önce çağrıldı. |
| HY013 | Bellek yönetimi hatası | Büyük olasılıkla düşük bellek koşulları nedeniyle, temel alınan bellek nesnelerine erişilemediğinden işlev çağrısı işlenemedi. |
| HY092 | Seçenek türü menzil dışı | (DM) Argüman Option için belirtilen değer şu değildi: SQL_CLOSE SQL_DROP SQL_UNBIND SQL_RESET_PARAMS |
| 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 SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT aracılığıyla ayarlanır. |
| IM001 | Sürücü bu işlevi desteklemiyor | (DM) StatementHandle ile ilişkili sürücü işlevi desteklemiyor. |
Comments
SQL_CLOSE seçeneğiyle SQLFreeStmt'yi çağırmak, SQLCloseCursor çağırmaya eşdeğerdir, ancak SQLFreeStmt ile SQL_CLOSE ifadesinde açık bir imleç yoksa uygulamayı etkilemez. Eğer açık bir imleç yoksa, SQLCloseCursor çağrısı SQLSTATE 24000 (Geçersiz imleç durumu) döner.
Bir uygulama, serbest bırakıldıktan sonra bir ifade tutamacı kullanmamalıdır; Sürücü Yöneticisi, bir fonksiyon çağrısındaki bir tutamacın geçerliliğini kontrol etmez.
Example
Sapları serbest bırakmak iyi bir programlama uygulamasıdır. Ancak basitlik için, aşağıdaki örnek tahsis edilen tutamaçları serbest bırakan kod içermez. Tutamaçların serbest bırakılmasına dair bir örnek için SQLFreeHandle Fonksiyonu bölümüne bakınız.
// 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);
}
İlgili Fonksiyonlar
| Hakkında bilgi için | Bkz: |
|---|---|
| Bir tutacağa tahsis etmek | SQLAllocHandle Fonksiyonu |
| Deyim işlemeyi iptal etme | SQLCancel İşlevi |
| İmleç kapatmak | SQLCloseCursor Fonksiyonu |
| Bir sapı serbest bırakmak | SQLFreeHandle Fonksiyonu |
| İmleç adı ayarlama | SQLSetCursorName İşlevi |