Aracılığıyla paylaş


Sessions

Şunlar için geçerlidir:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalitik Platform Sistemi (PDW)Microsoft Fabric'te SQL veritabanı

OLE DB sürücüsünü indirme

SQL Server için OLE DB Sürücüsü, SQL Server örneğine tek bir bağlantıyı temsil eder.

SQL Server için OLE DB Sürücüsü, oturumların bir veri kaynağı için işlem alanını sınırlamasını gerektirir. Belirli bir oturum nesnesinden oluşturulan tüm komut nesneleri, oturum nesnesinin yerel veya dağıtık işlemlerine katılır.

Başlatılmış veri kaynağında oluşturulan ilk oturum nesnesi, başlatma sırasında kurulan SQL Server bağlantısını alır. Oturum nesnesinin arayüzlerindeki tüm referanslar serbest bırakıldığında, SQL Server örneğine bağlantı veri kaynağında oluşturulan başka bir oturum nesnesine kullanılabilir hale gelir.

Veri kaynağında oluşturulan ek bir oturum nesnesi, veri kaynağı tarafından belirtilen SQL Server örneğiyle kendi bağlantısını kurar. SQL Server örneğine bağlantı, uygulama o oturumda oluşturulan nesnelere tüm referansları serbest bıraktığında kesilir.

Aşağıdaki örnek, SQL Server için OLE DB Sürücüsünün bir SQL Server veritabanına bağlanmak için nasıl kullanılacağını göstermektedir:

int main()  
{  
    // Interfaces used in the example.  
    IDBInitialize*      pIDBInitialize      = NULL;  
    IDBCreateSession*   pIDBCreateSession   = NULL;  
    IDBCreateCommand*   pICreateCmd1        = NULL;  
    IDBCreateCommand*   pICreateCmd2        = NULL;  
    IDBCreateCommand*   pICreateCmd3        = NULL;  
  
    // Initialize COM.  
    if (FAILED(CoInitialize(NULL)))  
    {  
        // Display error from CoInitialize.  
        return (-1);  
    }  
  
    // Get the memory allocator for this task.  
    if (FAILED(CoGetMalloc(MEMCTX_TASK, &g_pIMalloc)))  
    {  
        // Display error from CoGetMalloc.  
        goto EXIT;  
    }  
  
    // Create an instance of the data source object.  
    if (FAILED(CoCreateInstance(CLSID_MSOLEDBSQL, NULL,  
        CLSCTX_INPROC_SERVER, IID_IDBInitialize, (void**)  
        &pIDBInitialize)))  
    {  
        // Display error from CoCreateInstance.  
        goto EXIT;  
    }  
  
    // The InitFromPersistedDS function   
    // performs IDBInitialize->Initialize() establishing  
    // the first application connection to the instance of SQL Server.  
    if (FAILED(InitFromPersistedDS(pIDBInitialize, L"MyDataSource",  
        NULL, NULL)))  
    {  
        goto EXIT;  
    }  
  
    // The IDBCreateSession interface is implemented on the data source  
    // object. Maintaining the reference received maintains the   
    // connection of the data source to the instance of SQL Server.  
    if (FAILED(pIDBInitialize->QueryInterface(IID_IDBCreateSession,  
        (void**) &pIDBCreateSession)))  
    {  
        // Display error from pIDBInitialize.  
        goto EXIT;  
    }  
  
    // Releasing this has no effect on the SQL Server connection  
    // of the data source object because of the reference maintained by  
    // pIDBCreateSession.  
    pIDBInitialize->Release();  
    pIDBInitialize = NULL;  
  
    // The session created next receives the SQL Server connection of  
    // the data source object. No new connection is established.  
    if (FAILED(pIDBCreateSession->CreateSession(NULL,  
        IID_IDBCreateCommand, (IUnknown**) &pICreateCmd1)))  
    {  
        // Display error from pIDBCreateSession.  
        goto EXIT;  
    }  
  
    // A new connection to the instance of SQL Server is established to support the  
    // next session object created. On successful completion, the  
    // application has two active connections on the SQL Server.  
    if (FAILED(pIDBCreateSession->CreateSession(NULL,  
        IID_IDBCreateCommand, (IUnknown**) &pICreateCmd2)))  
    {  
        // Display error from pIDBCreateSession.  
        goto EXIT;  
    }  
  
    // pICreateCmd1 has the data source connection. Because the  
    // reference on the IDBCreateSession interface of the data source  
    // has not been released, releasing the reference on the session  
    // object does not terminate a connection to the instance of SQL Server.  
    // However, the connection of the data source object is now   
    // available to another session object. After a successful call to   
    // Release, the application still has two active connections to the   
    // instance of SQL Server.  
    pICreateCmd1->Release();  
    pICreateCmd1 = NULL;  
  
    // The next session created gets the SQL Server connection  
    // of the data source object. The application has two active  
    // connections to the instance of SQL Server.  
    if (FAILED(pIDBCreateSession->CreateSession(NULL,  
        IID_IDBCreateCommand, (IUnknown**) &pICreateCmd3)))  
    {  
        // Display error from pIDBCreateSession.  
        goto EXIT;  
    }  
  
EXIT:  
    // Even on error, this does not terminate a SQL Server connection   
    // because pICreateCmd1 has the connection of the data source   
    // object.  
    if (pICreateCmd1 != NULL)  
        pICreateCmd1->Release();  
  
    // Releasing the reference on pICreateCmd2 terminates the SQL  
    // Server connection supporting the session object. The application  
    // now has only a single active connection on the instance of SQL Server.  
    if (pICreateCmd2 != NULL)  
        pICreateCmd2->Release();  
  
    // Even on error, this does not terminate a SQL Server connection   
    // because pICreateCmd3 has the connection of the   
    // data source object.  
    if (pICreateCmd3 != NULL)  
        pICreateCmd3->Release();  
  
    // On release of the last reference on a data source interface, the  
    // connection of the data source object to the instance of SQL Server is broken.  
    // The example application now has no SQL Server connections active.  
    if (pIDBCreateSession != NULL)  
        pIDBCreateSession->Release();  
  
    // Called only if an error occurred while attempting to get a   
    // reference on the IDBCreateSession interface of the data source.  
    // If so, the call to IDBInitialize::Uninitialize terminates the   
    // connection of the data source object to the instance of SQL Server.  
    if (pIDBInitialize != NULL)  
    {  
        if (FAILED(pIDBInitialize->Uninitialize()))  
        {  
            // Uninitialize is not required, but it fails if an  
            // interface has not been released. Use it for  
            // debugging.  
        }  
        pIDBInitialize->Release();  
    }  
  
    if (g_pIMalloc != NULL)  
        g_pIMalloc->Release();  
  
    CoUninitialize();  
  
    return (0);  
}  

SQL Server oturum nesneleri için OLE DB Sürücüsünü bir SQL Server örneğine bağlamak, sürekli oturum nesneleri oluşturan ve serbest bırakan uygulamalar için önemli bir yük oluşturabilir. Ek yük, SQL Server oturum nesneleri için OLE DB Sürücüsü'nün verimli şekilde yönetilmesi ile en aza indirilebilir. SQL Server uygulamaları için OLE DB Sürücüsü, bir oturum nesnesinin SQL Server bağlantısını en az bir arayüzde referans tutarak aktif tutabilir.

Örneğin, komut oluşturma nesne referanslarından oluşan bir havuz tutmak, havuzdaki oturum nesneleri için aktif bağlantıları tutar. Oturum nesneleri gerektiğinden, havuz bakım kodu oturumu gerektiren uygulama yöntemine geçerli bir IDBCreateCommand arayüz işaretçisi iletir. Uygulama yöntemi artık oturumu gerektirmediğinde, yöntem arayüz işaretçisini havuz bakım koduna geri döndürür, uygulamanın komut oluşturma nesnesine olan referansını serbest bırakmak yerine.

Uyarı

Önceki örnekte, IDBCreateCommand arayüzü kullanılır çünkü ICommand arayüzü GetDBSession yöntemini uygular; bu, komut veya sıra kümesi kapsamında bir nesnenin oluşturulduğu oturumu belirlemesine olanak tanıyan tek yöntemdir. Bu nedenle, bir komut nesnesi ve sadece bir komut nesnesi, bir uygulamanın ek oturumların oluşturulabileceği bir veri kaynağı nesne işaretçisini almasına izin verir.

Ayrıca Bkz.

Veri Kaynak Nesneleri (OLE DB)