'MyDB' adlı MS SQL Server veritabanına bağlanmak için SQLDriverConnect
numaralı çağrıları yapan bir uygulama oluşturdum. Bazı şeyler yaptıktan sonra SQLDisconnect.But çağırır, ancak SSMS 'MyDB' silmek başarısız olur. Bu, bazı kaynakların düzgün kapatılmadığı anlamına gelir. Sadece işlemden çıktıktan sonra SSMS bunu siler (, yani işletim sistemi bunları serbest bırakır) ve tüm SQLHENV ve SQLHDBC düzgün bir şekilde yayınlanır. Aşağıdaki Kodu:ODBC nesnelerini doğru şekilde nasıl bırakılır?
SMARTHSTMT::~SMARTHSTMT()
{
if (!m_hstmt) return;
SQLFreeStmt(m_hstmt, SQL_CLOSE);
SQLFreeStmt(m_hstmt, SQL_UNBIND);
SQLFreeStmt(m_hstmt, SQL_RESET_PARAMS);
SQLFreeHandle(SQL_HANDLE_STMT, m_hstmt);
m_hstmt = nullptr;
};
nasıl serbest bırakılmaz hangi nesne bulabilirim? Almam gereken başka bir husus var mı? herhangi bir fikir veya yardım takdir. Düzenleme: Ayrılma için kod:
void AConnection::uDisconnect()
{
if (m_hdbc)
{
SQLDisconnect(m_hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, m_hdbc);
m_hdbc = nullptr;
}
if (m_henv)
{
SQLFreeHandle(SQL_HANDLE_ENV, m_henv);
m_henv = nullptr;
}
}
SQLDisconnect sonucu nedir: Belki .. SQL Server Side araçları o anda tam olarak açık ne olduğu konusunda daha fazla ayrıntı analiz etmek
fazla bilgi için buraya bakınız olsun? Gönderdiğiniz kod yalnızca açıklama-işleyiciyi serbest bırakmak, bağlantı ve çevre işleyişi hakkında ne var? – erg
SQLFreeHandle kullanarak serbest bırakıldılar. Sadece ifadeleri yok etmek için kod yayınladım, çünkü ifadeler yaygın olarak kullanılıyor ve bunları serbest bırakmak oldukça olası. –
Bağlantı tanıtıcısını serbest bırakırsanız, bu bağlantı tanıtıcısından kaynaklanan açık bildirim tutamaçları varsa, SQLERROR değerini dönüş değeri olarak almalısınız, değil mi? – erg